2013-03-01 107 views
1

你好,大家好我有一個小isue .. 我是新來的PDO,我想實現它在我的網站,我有以下代碼:PHP PDO插入錯誤

foreach($liga1 as $item) { 
$data = $item->get_date('j M Y, g:i a'); 
$titlu = $item->get_title(); 
$link = $item->get_permalink(); 
$text = $item->get_description(); 
$cat = "Liga 1"; 

$dbhost  = "localhost"; 
$dbname  = "site"; 
$dbuser  = "root"; 
$dbpass  = "root"; 

// database connection 
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); 

// query 
$sql = "INSERT INTO stiri ('id','data', 'continut', 'link', 'titlu', 'categorie') VALUES (:data, :text, :link, :titlu, :categorie)"; 
$q = $conn->prepare($sql); 
$q->execute(array(':data', $data, 
       ':continut', $text, 
       ':link', $link, 
       ':titlu', $titlu, 
       ':categorie', $cat)); 
} 

當我運行這個代碼我得到以下錯誤:

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\xampp\htdocs\ice\sql\sport2.php on line 50 

正如你可以看到我想要在數據庫中插入一個特定的類別至極我投入,我也有在mysql表中的「ID」至極我不知道如何使用PDO插入它。 我也想在這裏使用類,因爲我需要把相同的代碼放在20頁以上。

回答

1

你錯過了:文本。你需要爲它添加另一個參數。您將其命名爲contuit,並告訴pdo期望:文本

+0

是的,我確實犯了一個錯誤,我認爲代碼寫得不好,謝謝你的評論 – 2013-03-01 00:43:27

1

問題是你有5列定義,但你只提供了四個值。如果列名稱ID設置爲AUTO_INCREMENT ed列,則可以從列列表中省略,例如。

INSERT INTO stiri (data, continut, link, titlu, categorie) VALUES (...) 

錯誤即將出現的另一個原因是您正在用單引號包裝列名稱。它將列名轉換爲字符串,這就是查詢失敗的原因。爲了解決問題,請刪除它們周圍的單引號。

INSERT INTO stiri (id,data, continut, link, titlu, categorie) VALUES (...) 

更新1

$sql = "INSERT INTO stiri (data, continut, link, titlu, categorie) VALUES (?, ?, ?, ?, ?)"; 
$q = $conn->prepare($sql); 
$q->bindParam(1, $data); 
$q->bindParam(2, $text); 
$q->bindParam(3, $link); 
$q->bindParam(4, $titlu); 
$q->bindParam(5, $cat); 
$q->execute(); 
+0

更改了代碼,但錯誤仍然存​​在。 – 2013-03-01 00:25:52

+0

也是,除非這是一種替代語法,execute數組應該包含'array('data'=> $ data,'content'=> $ text),...)形式的鍵值對'' – mpen 2013-03-01 00:26:08

+0

好的,編輯,但我現在得到這個錯誤:無效的參數編號:參數未定義更改數組(1 => $數據,2 => $文本),...),並在插入我放?我正確的方式? – 2013-03-01 00:35:22