2013-03-01 106 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