PHP: mysqli_query and die()


PHP: mysqli_query and die()

代码:

我正在测试下面的简单代码以将数据插入我的数据库:

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, DESCRIBEEXPLAIN查询,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一起检查是否使用查询修改了任何行。