【发布时间】:2014-01-18 20:08:10
【问题描述】:
很抱歉再次发布有关准备好的语句,但我对 PHP/MySQL 很陌生,对准备好的语句完全陌生。
我的代码如下所示:
function query($query, $bindings, $conn) {
$stmt = $conn->prepare($query);
$stmt->execute($bindings);
//$results = $stmt->fetchAll();
return $results ? $results : false;
}
$sitecategories = array(
0 => "Uncategorized", 10 => "Abstract", 11 => "Animals"
);
foreach ($sitecategories as $key => $value) {
if ( $conn ) {
$catquery=query("INSERT IGNORE into categories (cat_id, label) VALUES (:catid, :label)",
array(':catid'=>$key, ':label'=>$value),
$conn);
} else {
print "could not connect to the database";
}
}
连接在别处,但 INSERT 工作正常。生成的 mysql 表如下所示(cat_id 是唯一的):
+----+--------+-------------+
| id | cat_id | label |
+----+--------+-------------+
| 1 | 0 | Uncategoriz |
| 2 | 10 | Abstract |
| 3 | 11 | Animals |
但是我试图弄清楚如何创建更新(如果从 $sitecategories 中添加或删除项目)。我将 INSERT 调整为
foreach ($sitecategories as $key => $value) {
if ( $conn ) {
$catquery=query("UPDATE categories SET cat_id=:catid, label = :label",
array('catid'=>$key, 'label'=>$value),
$conn);
} else {
print "could not connect to the database";
}
}
但是当我运行它时,我得到了
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity
constraint violation: 1062 Duplicate entry '0' for key 'cat_id''
我猜这与 cat_id 的唯一性有关,这个问题与我准备好的语句无关,而是一般的 MySQL 语法问题。任何帮助都将非常感激!
【问题讨论】:
-
错误很明显。表中的
cat_id被声明为唯一的,并且您将重复值放在多行中。更改表以满足您的需要(通过删除unique约束)或修复您的代码以使用表定义。没有语法问题。 -
感谢您的回复。我想确保数据库包含与数组相同的值。所以如果一个项目被添加到数组中,它应该被添加到数据库中。如果将其从阵列中删除,则应将其从数据库中删除。 cat_id 是唯一的并且仅与一个标签相关,这一点很重要。 UPDATE 是错误的方法吗?
标签: php mysql prepared-statement