gpt4 book ai didi

PHP 通过 MySQL 准备好的语句更新值

转载 作者:行者123 更新时间:2023-11-30 00:47:59 25 4
gpt4 key购买 nike

我很抱歉再次发布有关准备好的语句,但我对 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 语法问题。任何有关任何一个的帮助都将非常感激!

最佳答案

您的更新查询中没有 WHERE 子句,因此它将尝试将每条记录中的所有 catid 更改为(在本例中)“0”。这就是为什么它给你错误。它尝试为每条记录设置相同的 catid,但它必须是唯一的。您需要向查询添加 WHERE 子句,具体取决于您要更改的记录。就像 WHERE id=:id 一样。或者 WHERE catid=:catid。我不认为您想更改每条记录?

关于PHP 通过 MySQL 准备好的语句更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21209246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com