代码:
我正在测试下面的简单代码以将数据插入我的数据库:
mysqli_query($con,"INSERT INTO Persons (Age) VALUES (35) WHERE FirstName='John'") or die("Error");
在我的数据库中,我没有FirstName=John
的行(它是测试的一部分)。
我期待看到的:
因为我的数据库中没有FirstName=John
行,所以我希望die()
向我发送错误消息。
问题:
Die()
不会向我发送错误消息。实际上,我观察到die()
仅在无法连接到数据库时才向我发送错误消息。
我的想法:
好吧,也许这就是die()
的工作方式...但是,当查询由于没有连接以外的原因未执行时,如何获得通知?
这是正常的。 mysqli_query 仅在查询失败时返回 FALSE,即发生 SQL 级别。受影响的 0 行查询不被视为失败(就像 SELECT 查询的空结果不是失败一样)。在这些情况下mysqli_query将返回 TRUE。
您要做的是检查 $con->affected_rows
的值以获取受最后一个查询影响的行数,如果等于 0,则 die。
您的查询是有效的查询,因此mysqli_query返回 true,因此 die 不会被调用
如手册中所述,"mysqli_query()
在失败时返回FALSE
。对于成功的SELECT, SHOW, DESCRIBE
或EXPLAIN
查询,mysqli_query()
将返回mysqli_result object
。对于其他成功的查询mysqli_query(
) 将返回TRUE."
因此,如果您没有行,则不会失败FirstName=John
您可以使用mysqli_affected_rows
返回插入的行数
你的SQL上没有错误,只是你没有一行,你可以对结果的数量做一个if,如果这是你想弄清楚的在这里,您有一个过程和面向对象的解决方案。
http://php.net/manual/en/mysqli.query.php
在您的情况下,要知道是否存在错误:
if (mysqli_connect_errno()) {
printf("Connect failed: %s'n", mysqli_connect_error());
exit();
}
或知道结果
if ($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) {
printf("Select returned %d rows.'n", mysqli_num_rows($result));
/* free result set */
mysqli_free_result($result);
}
Die()
没有触发,因为查询成功运行。它只是没有更新任何内容,因为没有名字为 John
的行。
您应该与affected_rows
一起检查是否使用查询修改了任何行。