Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > создание таблицы из массива


Автор: hhh 9.5.2008, 10:35
Есть вот такой XML файл 

Код

<?xml version="1.0"?>
<form>
    <element>
        <title>name</title>
        <type>varchar</type>
        <length>15</length>
        <isobyaz>1</isobyaz>
    </element>

        <element>
        <title>phone</title>
        <type>number</type>
        <length>15</length>
        <isobyaz>1</isobyaz>
    </element>
</form>


прочита его в массив в таком виде

 [0] [title] = name
 [0] [type] = varchar
 [0] [length] = 15
 [0] [isobyaz] = 1

 [1] [title] = phone
 [1] [type] = number
 [1] [length] = 15
 [1] [isobyaz] = 1

Пытаюсь саздать из этого массива таблицу 
  но почемуто выходит ошибка
 
Код

require_once ("connetdb.php");
$sql="CREATE TABLE table_name(";
foreach($date as $key=>$var){
  if ($var['type']=='varchar'){
    $sql.=$var['title']." VARCHAR (".$var['length'].")";
  }
  elseif ($var['type']=='number'){
    $sql.=$var['title']." INT (".$var['length'].")";
  }
  if ($var['isobyaz'] && $var['isobyaz']==1){
   $sql.="NOT NULL";
  }
     else {
            $sql.=" NULL";
          }
  $sql.="<br>";
}
$sql.=");";
echo $sql."<br>";

mysql_query($sql) or die("Ошибка: ".mysql_error());


Получается код в таком виде ошибка думал из за запятой
Код

CREATE TABLE table_name(
                      name VARCHAR (15)NOT NULL,
                      phone INT (15)NOT NULL,
                  );


Но при таком тоже кодетоже ошибка
 
Код

CREATE TABLE table_name(
                      name VARCHAR (15)NOT NULL
                      );

Автор: Feldmarschall 9.5.2008, 10:38
О, hhh! Как будто специально для тебя писал - http://forum.vingrad.ru/articles/topic-206796.html !

Автор: hhh 9.5.2008, 10:47
Ошибка: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
name VARCHAR (15)NOT NULL
)' at line 1

Автор: solenko 9.5.2008, 11:45
Не, ну я бы на месте mysql тоже обиделся, если бы мне html пытались скормить )
Вам нужно понять разницу между ТЕГОМ <br /> и СИМВОЛОМ перевода строки \n.

По поводу лишней запятой... Очень удобно собирать определения полей в массив а потом делать ему join/implode с разделителем запятой.

Автор: hhh 9.5.2008, 12:09
Как можно решить проблему с join/implode  
 
Код

$sql="CREATE TABLE table_name(";
foreach($news as $key=>$var){
  if ($var['type']=='varchar'){
    $sql.=$var['title']." VARCHAR (".$var['length'].")";
  }
  elseif ($var['type']=='number'){
    $sql.=$var['title']." INT (".$var['length'].")";
  }
  if ($var['isobyaz'] && $var['isobyaz']==1){
   $sql.="NOT NULL";
  }
     else {
            $sql.=" NULL";
          }
  $sql.=",";
}
$sql.=");


конец sql кода должен заканчиваться без запятой

Код

CREATE TABLE table_name(id INT (15)NOT NULL,
                                           name varchar (15)NOT NULL,
                                           addres varchar (15)NOT NULL,
                                           );


Автор: solenko 9.5.2008, 12:29
Код

$filed_defs = array();
foreach($news as $key=>$var){
  $field_def = '';
  if ($var['type']=='varchar'){
    $field_def.=$var['title']." VARCHAR (".$var['length'].")";
  }
  elseif ($var['type']=='number'){
    $field_def.=$var['title']." INT (".$var['length'].")";
  }
  if ($var['isobyaz'] && $var['isobyaz']==1){
   $field_def.="NOT NULL";
  }
     else {
            $field_def.=" NULL";
          }
   $filed_defs[] = $field_def;
}
$sql="CREATE TABLE table_name(".join(",\n", $field_defs).")";

Автор: hhh 9.5.2008, 12:58
Код

require_once ("config.php");
$filed_defs = array();
foreach($news as $key=>$var){
  $field_def = '';
  if ($var['type']=='varchar'){
    $field_def.=$var['title']." VARCHAR (".$var['length'].")";
  }
  elseif ($var['type']=='number'){
    $field_def.=$var['title']." INT (".$var['length'].")";
  }
  if ($var['isobyaz'] && $var['isobyaz']==1){
   $field_def.="NOT NULL";
  }
     else {
            $field_def.=" NULL";
          }
   $filed_defs[] = $field_def;
}
$sql="CREATE TABLE table_name(".join(",\n", @$field_defs).")";
echo $sql."<br>";
mysql_query($sql) or die("Ошибка: ".mysql_error());


Warning: join() [function.join]: Bad arguments. in z:\home\localhost\www\xml.php on line 140
CREATE TABLE table_name()
Ошибка: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

Автор: Fortop 9.5.2008, 14:45
hhh, ты не хочешь прочитать ссылку что дал Feldmarshall?

Посмотри внимательно, на код, который ты отправляешь в базу?

Автор: hhh 9.5.2008, 15:09
Вроде все правильно не могу найти где ошибка

Автор: Feldmarschall 9.5.2008, 15:17
проверь, какие аргументы ты передаешь в функцию join
выведя каждый с помощью функции var_dump()

Автор: hhh 9.5.2008, 15:31
var_dump($field_def);

string(23) "addres INT (15)NOT NULL" 

Автор: Feldmarschall 9.5.2008, 15:36
а зачем ты передаешь field_def, если тебе нужно передавать field_defs?

Автор: hhh 9.5.2008, 15:48
var_dump($field_defs);

NULL 

Автор: Feldmarschall 9.5.2008, 16:07
воооот!
значит, в этот массив почему-то ничего не попадает, хотя должно.
дальше смотри по коду - почему. 
где-то у тебя косяк со скобками, что ли

Автор: Nigel 9.5.2008, 17:11
следи за названиями переменных
$sql="CREATE TABLE table_name(".join(",\n", @$filed_defs).")";

Автор: Feldmarschall 9.5.2008, 17:18
А вот, как раз, для таких случаев и служит команда 
Код

error_reporting(E_ALL);

вначале всех скриптов!
ПХП сам бы сказал, что не к той переменной обращаешься

Автор: Fortop 9.5.2008, 17:39
Цитата(Feldmarschall @  9.5.2008,  17:18 Найти цитируемый пост)
А вот, как раз, для таких случаев и служит команда
Код

error_reporting(E_ALL);


Feldmarschall, это абсолютно до лампочки

Потому что он сам себе закрыл глаза используя (@).
Видимо скрипт таки ругался smile

Автор: hhh 9.5.2008, 17:52
Всем огромное спасибо за помощь smile 

Автор: Feldmarschall 9.5.2008, 17:59
Блин, точно. Оттуда у этой собаки ноги и растут.

hhh, ты хоть понял, кукую невероятную глупость сделал, поставив @? Где ты вообще такого набрался, кто тебя научил так исправлять ошибки?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)