Создаем быстро таблицы

+1
3.32K
Собственно профи от php могут пропустить этот пост мимо.
Я сделал для себя набор функций, позволяющий быстро (копировать/вставить) описывать механизм создания/удаления таблиц.
Пойдет тем, кто не хочет по каким-то причинам лазить каждый раз в phpMyAdmin, а хочет иметь небольшой универсальный инсталлятор таблиц, в котором можно легко подправить параметры создаваемых таблиц. От знания типов данных MySQL не освобождает… ;)
Этот пост создан для понимания описания, приведенного в этом посте про карты
  1. <?
  2. //Error_Reporting(E_ALL);
  3. $db_file = "db.php";// Здесь лежат пути и пароли к БД
  4.  
  5. //описываем имена таблиц
  6. $tableParameterTypes = "GM_PARAMETERTYPES";
  7. $tableObjectTypeParameters = "GM_OBJECTTYPEPARAMETERS";
  8. $tableObjectTypes = "GM_OBJECTTYPES";
  9. $tableObjects = "GM_OBJECTS";
  10. $tablePoints = "GM_POINTS";
  11.  
  12. //В массив $Tables по именам таблиц вставляем массивы из имен столбцов и их параметров
  13. $Tables = array(
  14. $tableParameterTypes => array (
  15. "ParameterTypeID"=>"INT NOT NULL AUTO_INCREMENT PRIMARY KEY",
  16. "Info" =>"TEXT"
  17. ),
  18. $tableObjectTypeParameters => array (
  19. "ObjectTypeID"=>"INT NOT NULL AUTO_INCREMENT PRIMARY KEY",
  20. "ParameterTypeID" =>"INT",
  21. "ParameterName" => "TEXT",
  22. "DefaultValue"=>"TEXT",
  23. "Info"=>"TEXT"
  24. ),
  25. $tableObjectTypes => array (
  26. "ObjectTypeID"=>"INT NOT NULL AUTO_INCREMENT PRIMARY KEY",
  27. "ObjecTypeName" =>"TEXT",
  28. "Info" => "TEXT"
  29. ),
  30. $tableObjects => array (
  31. "ObjectID"=>"INT NOT NULL AUTO_INCREMENT PRIMARY KEY",
  32. "Name" =>"TEXT",
  33. "Info" =>"TEXT",
  34. "ParentObjectID" => "INT",
  35. "ObjectTypeID"=>"INT"
  36. ),
  37. $tablePoints => array (
  38. "PointID"=>"INT NOT NULL AUTO_INCREMENT PRIMARY KEY",
  39. "ParentObjectID" => "INT",
  40. "lat" =>"TEXT",
  41. "lng" =>"TEXT"
  42. ),
  43. );
  44.  
  45. function createTables() //Функция создает таблицы, описанные в массиве $Tables
  46. {
  47. echo "Starting createTables()
  48. ";
  49. global $Tables;
  50. //print_r($Tables);
  51. foreach ($Tables as $key => $data)
  52. {
  53. echo $key."
  54. ";
  55. createTable($key);
  56. }
  57. }
  58.  
  59. function createTable($tableName) //Функция создает таблицу с указанным именем, описанную в массиве $Tables
  60. {
  61. echo "Starting createTable(".$tableName.")
  62. ";
  63. global $db_file;
  64. include($db_file);
  65.  
  66. global $Tables;
  67. $vars = $Tables[$tableName];
  68.  
  69. print_r($vars);
  70. $request = "CREATE TABLE `".$tableName."` (";
  71. $keys = array_keys($vars);
  72. $maxI = count($vars);
  73.  
  74. for($i=0; $i<$maxI; $i++)
  75. {
  76. $request.="`".$keys[$i]."` ".$vars[$keys[$i]];
  77. if(($i+1)<$maxI){$request.=", ";}
  78. }
  79. $request.=") ENGINE = MYISAM CHARACTER SET utf8 ; ";
  80.  
  81. echo '
  82. $request: '.$request."
  83. ";
  84. $result = mysql_query($request) or die("Query failed : " . mysql_error());
  85.  
  86.  
  87.  
  88. /* Освобождаем память от результата */
  89.  
  90.  
  91. }
  92.  
  93. function dropTables() //Функция удаляет таблицы, описанные в массиве $Tables
  94. {
  95. echo "Starting dropTables()
  96. ";
  97. global $Tables;
  98.  
  99. //print_r($Tables);
  100.  
  101. foreach ($Tables as $key => $data)
  102. {
  103. echo $key."
  104. ";
  105. dropTable($key);
  106. }
  107. }
  108.  
  109. function dropTable($tableName) //Функция удаляет таблицу с указанным именем, описанную в массиве $Tables
  110. {
  111. echo "Starting dropTable(".$tableName.")
  112. ";
  113. global $db_file;
  114. include($db_file);
  115. $request = "DROP TABLE `".$tableName."`;";
  116. echo "SQLRequest=".$request."
  117. ";
  118. $result = mysql_query($request) or die("Query failed : " . mysql_error());
  119. }
  120.  
  121.  
  122. /* Освобождаем память от результата */
  123. //mysql_free_result($result);
  124.  
  125. /* Закрываем соединение */
  126. //mysql_close($db);
  127.  
  128. //Собственно здесь мы указываем, что именно мы хотим сделать с таблицами.
  129. createTables();
  130. //dropTables();
  131. //print_r($Tables);
  132. //print_r($TransportTypes);
  133. ?>
Файл db.php. Для тех кто отлаживает на локальной машине, а потом выкладывает на хостинг, где доступ к БД отличается.
  1. <?
  2. echo "Starting db.php<br>";
  3. $db_user = "dbuser";
  4. $db_host = "localhost";
  5. $db_password = "dbpass";
  6. $db_name = "database";
  7. $db = mysql_connect("$db_host", "$db_user", "$db_password");
  8. mysql_select_db("$db_name",$db) or die("Could not select database");
  9. ?>
  10.  
0
Виктор Виктор 14 лет назад #
Львенок:
ENGINE = MYISAM CHARACTER SET utf8
Я что-то пропустил и база в 1.5.3 уже в UTF-8?

Набор функций, конечно, полезный, но мне бы проще было, чтобы был мини sql-commander. То есть текстовое поле для ввода команды, кнопка отправить и вывод результата выполнения запроса если он был select. А то порой для простого буквально действия лезть в phpmyadmin заходя через панель хостера так влом, что называется из пушки по воробьям.
Кстати, результат возвращают не только select`ы ещё и обработку show бы.
А это хорошо бы (с одной стороны) ввести в api движка для облегчения и стандартизации создания таблиц устанавливаемыми компонентами или модулями (в плагинах есть такая секция и можно при инсталяции записать чего хочешь).
С другой же стороны - это дыра в движке.
0
Львенок Львенок 14 лет назад #
Это старая заготовка. Опубликовал в связи с тем, что в посте про карты использовал аналогичные куски кода.
А вообще можно наверное посмотреть и попытаться расширить API Инстанта.
0
L.B.Griffin L.B.Griffin 14 лет назад #
Слазить в ПХП админ не так уж и долго.. А вообще думаю, что безопасность превыше удобства, тем более что тут особенного неудобства-то и нету...
0
lezginka.ru lezginka.ru 14 лет назад #
в последнее время все больше ломают наш движок, ставят ссылки (на разные сайты)
0
Львенок Львенок 14 лет назад #
это к чему?
0
lezginka.ru lezginka.ru 14 лет назад #
Львенок, это к тому, если есть возможность и время, обратить свои знания в сторону безопасности движка.
движок набирает популярность и это проблема уже назрела.
0
Львенок Львенок 14 лет назад #
пока сам не столкнусь с проблемами, ничего не смогу сказать...
у меня пока нет полноценных работающих проектов на Инстанте
пока только знакомлюсь с мелочами

Еще от автора

Шаблоны и Стили. Что InstantCMS нам выдает...
Зайдите на страничку вашего сайта InstantCMS. Через контекстное меню откройте код HTML страницы... Понятно что-нибудь?? Сомневаюсь...
Шаблоны и стили. Пролог
Снова предварительный пост. Мы будем разбираться в задачах, с которыми мы будем сталкиваться при работе с шаблонами, и которые нам придется решать.
А что у нас за Яваскрипты в стандартном шаблоне???
Вот прежде чем начинать возиться со стилями компонентов и шаблона целиком будет полезно посмотреть, а что у нас в шаблоне за Яваскрипты подключаются..
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.