2012-12-02 158 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我錯了,你可以解釋一個雙引號之間的數組,對於混淆抱歉。

相關問題