2012-12-02 161 views
0

我试图保存数据从一个xml文档中加载到SimpleXML应用程序中的节点。下面是我的代码,但是SQL语句出错了,因为我得到了一个致命错误。尝试保存到SQLite数据库时发生致命错误

我不明白为什么会出现这种情况,因为id(如下面的错误消息中提到的)用作要放入的值,而不是列。

那么,我在这里做错了什么?谢谢!

PHP:

$db; 

    $theProducers = simplexml_load_file('sources/producers.xml'); 

    foreach ($theProducers->producer as $producer) { 
     $attr = $producer->attributes(); 
     $producers[$i]['id'] = (int)$attr[0]; 
     $producers[$i]['name'] = (string)$producer->name; 
     $producers[$i]['address'] = (string)$producer->address; 
     $producers[$i]['zipcode'] = (string)$producer->zipcode; 
     $producers[$i]['town'] = (string)$producer->town; 
     $producers[$i]['url'] = (string)$producer->url; 
     $producers[$i]['imgurl'] = (string)$producer->imgurl; 

     $i += 1; 
    } 

    try { 
      $db = new PDO('sqlite:ProducersDB.sqlite'); 
      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     } 
    catch(PDOException $e) { 
     die("Something went wrong: " . $e->getMessage()); 
    } 

    for($i = 0; $i < count($producers); $i++) { 

     $sql = "INSERT INTO producers (producerid, name, address, zipcode, town, url, imgurl) 
       VALUES($producers[$i]['id'], $producers[$i]['name'], $producers[$i]['address'], $producers[$i]['zipcode'], $producers[$i]['town'], $producers[$i]['url'], $producers[$i]['imgurl']); "; 

     if(!$db->query($sql)) { 
      die("Couln't execute query!"); 
     } 
    } 

错误消息:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: 
General error: 1 no such column: 'id'' in 
/Applications/XAMPP/xamppfiles/htdocs/app/index.php:55 Stack trace: #0 
/Applications/XAMPP/xamppfiles/htdocs/app/Labb2/index.php(55): 
PDO->query('INSERT INTO pro...') #1 {main} thrown in 
/Applications/XAMPP/xamppfiles/htdocs/app/index.php on line 55 

分贝结构:

Table: Producers 

id INTEGER PRIMARY KEY, 
producerid INT, 
name TEXT, 
address TEXT, 
zipcode INT, 
town TEXT, 
url TEXT, 
imgurl TEXT 

回答

1

根据string parsing documentation,多维数组要求您使用复杂的语法;此外,SQL字符串必须用引号引起来:

$sql = "INSERT INTO producers (...) 
     VALUES({$producers[$i]['id']}, '{$producers[$i]['name']}', ..." 

为了避免字符串格式化的问题,建议使用parameters

1

您查询到INSERT的Elemen你桌子里的东西没有正确建造。你的价值观是在是不是你的双引号之间的正确解释一个PHP数组,它应该是这样的:

$sql = "INSERT INTO producers(producerid, name) 
     VALUES ('" . $producers[$i]['id'] . "', '" . $producers[$i]['name'] . "')"; 

你也应该从PDO寻找方法prepare到查询正确设置动态值,而不是自己建造它。

编辑:根据PHP文档Strings我错了,你可以解释一个双引号之间的数组,对于混淆抱歉。

相关问题