0

编码:

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

mysqli_query($con,"INSERT INTO Persons (Age) VALUES (35) WHERE FirstName='John'") or die("Error");

在我的数据库中,我没有一行FirstName=John(它是测试的一部分)。

我期望看到的:

因为我的数据库中没有行 where FirstName=John,所以我希望die()将错误消息发送给我。

问题:

Die()不向我发送错误消息。事实上,我观察到die()只有在无法连接到数据库时才会向我发送错误消息。

我的想法:

好吧,可能是它是如何die()工作的......但是当查询由于没有连接以外的原因未执行时如何获得通知?

4

5 回答 5

2

您的查询是有效查询,因此 mysqli_query 返回 true,因此不会调用 die

于 2013-09-22T04:53:29.150 回答
2

这个是正常的。如果查询失败, mysqli_query 只会返回 FALSE ,即发生 SQL 级别。影响 0 的行查询不被视为失败(就像 SELECT 查询的空结果不是失败一样)。在这些情况下,mysqli_query 将返回 TRUE。

您要做的是检查 的值$con->affected_rows以获取受最后一个查询影响的行数,如果等于 0,则死亡。

于 2013-09-22T04:49:12.810 回答
1

如手册所述,失败"mysqli_query()返回FALSE。对于成功SELECT, SHOW, DESCRIBEEXPLAIN查询mysqli_query()将返回一个mysqli_result object. 对于其他成功的查询mysqli_query()将返回TRUE."

因此,如果您没有行 where 就没有失败FirstName=John

您可以使用mysqli_affected_rows返回插入的行数

于 2013-09-22T04:47:37.010 回答
0

Die()没有触发,因为查询成功运行。它只是没有更新任何内容,因为没有名字为John.

您应该检查查询affected_rows是否修改了任何行。

于 2013-09-22T04:49:12.553 回答
0

您的 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);
}
于 2013-09-22T04:49:47.013 回答