gpt4 book ai didi

php - mysqli->commit 总是提交,即使语句中有错误

转载 作者:行者123 更新时间:2023-11-29 19:13:42 26 4
gpt4 key购买 nike

我想使用commit()来检查某些查询是否有错误。尽管其中一条语句有错误,但它仍然有效。

这是我的代码示例,

$mysqli->autocommit(FALSE);
$stmt_a = "INSERT INTO choice(title, question_id) VALUES('choice_A', 2)";
$stmt_b = "INSERT INTO choice(title, question_id) VALUES('choice_B', 2)";
$stmt_c = "INSERT INTO choice(title, question_id) VALUES('choice_C')";

$mysqli->query($stmt_a);
$mysqli->query($stmt_b);
$mysqli->query($stmt_c);

if(!$mysql->commit()){
echo "MySQL commit failed !";
}else{
echo "successful!"
}

根据代码,虽然 stmt_c 缺少 Question_id 值,但它提交了 stmt_a 和 stmt_b 并忽略了 stmt_c。另外,在其他条件下,结果都是成功的。

我检查commit()结果的方法是否错误?

非常感谢您的宝贵时间。

最佳答案

如果您想知道查询是否抛出错误,请不要丢弃返回值。 mysqli->query() returns false on error 。您永远不应该在没有检查其返回值的情况下调用它。

COMMIT 的要点是提交您对数据库所做的任何更改,并释放您仍然持有的任何行锁。如果您在事务期间造成错误,服务器会假定您必须已纠正问题,并且必须对最终结果感到满意...否则您不会尝试提交。

COMMIT 仅当您所做的任何更改实际上无法提交时才会失败 - 因此提交时失败的情况很少见,通常仅在发生灾难性事件(例如数据库服务器崩溃)时才会发生或在您的交易正在进行时重新启动。 (当然,如果您正在运行 Galera Replication Provider,则可能会由于其他原因而发生这种情况,但如果您运行的是,您就会知道这一点。)

如果您之前的查询导致错误,或者实际上没有插入/更新/删除任何内容,那么按照设计,这不应该导致提交失败。

关于php - mysqli->commit 总是提交,即使语句中有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42880026/

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