当前位置: 首页 > 面试题库 >

mysqli准备好的语句num_rows返回0,而查询返回大于0

何兴邦
2023-03-14
问题内容

我有一个简单的准备好的声明,用于实际存在的电子邮件:

$mysqli = new mysqli("localhost", "root", "", "test");
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$sql = 'SELECT `email` FROM `users` WHERE `email` = ?';
$email = 'example@hotmail.com';

if ($stmt = $mysqli->prepare($sql)) {
    $stmt->bind_param('s', $email);
    $stmt->execute();

    if ($stmt->num_rows) {
        echo 'hello';
    }

    echo 'No user';
}

结果:No user在应回显时回显hello

我在控制台中运行了相同的查询,并使用与上述相同的电子邮件得到了结果。

我也使用一个简单的mysqli查询进行了测试:

if ($result = $mysqli->query("SELECT email FROM users WHERE email = 'example@hotmail.com'")) {
    echo 'hello';

}

结果:我所期望的 hello

$resultnum_rows是1。

为什么准备的陈述 num_row不大于0?


问题答案:

当您通过mysqli执行一条语句时,直到您获取结果,结果才真正在PHP中出现-
结果由数据库引擎保存。因此,mysqli_stmt对象无法知道执行后立即有多少结果。

像这样修改您的代码:

$stmt->execute();
$stmt->store_result(); // pull results into PHP memory

// now you can check $stmt->num_rows;

见手册

这不适用于您的特定示例,但是如果您的结果集很大,$stmt->store_result()则会消耗大量内存。在这种情况下,如果您关心的只是弄清楚是否至少返回了一个结果,请不要存储结果。相反,只需检查结果元数据是否不为空:

$stmt->execute();
$hasResult = $stmt->result_metadata ? true : false;

见手册



 类似资料:
  • 问题内容: 我一直在获取要使用mysqli返回的行数方面遇到麻烦。即使确实有一些结果,我每次都会得到0。 为什么没有显示正确的数字? 问题答案: 您需要先调用num_rows查找: 请参阅文档,该文档显示在页面顶部附近(在主要说明区域中)…

  • 问题内容: 在阅读了大量的主题,教程和其他内容之后-我想在这里发布信息,希望有人能为我提供帮助。我尝试了所有可能得到的建议,但仍然没有用。 这是我的代码: 我总是得到“ c-> 0”……但是已经有输出了……所以我在做什么错呢?:/ 问题答案: 您需要在访问属性之前调用该方法。 来自对PHP手册文档的评论: 如果不使用,并在执行准备好的语句后立即调用此函数,则该函数通常将返回0,因为它无法知道结果集

  • 问题内容: 目前,我正在与MySQLi一起玩,试图弄清它们的工作原理。在我目前的项目中,我总是喜欢在编码时回显查询字符串,以确保一切正确,并快速调试我的代码。但是…如何使用准备好的MySQLi语句来做到这一点? 例: 我一直在浏览此列表(http://www.php.net/mysqli),但没有任何运气。 编辑 好吧,如果在MySQLi中不可能,也许我会坚持这样的事情: 显然,这还远未达到完美,

  • 问题内容: 我有一个输出到CSV文件的脚本。但是,即使数据库中当前只有一行,但我得到的输出却在表的每一行中回显了每一列两次。 例如:1,1,John,John,Smith,Smith,2014,2014应该为1,John,Smith,2014 在我使用PDO和准备语句之前,这种方法很好用,所以我在想也许我不了解fetch()如何正确工作。下面是我的代码。知道我做错了什么吗? 问题答案: 您应该对P

  • 问题内容: 此代码仅返回一行,但应返回2行。我在phpMyAdmin中尝试了SQL,它完美返回了2行。我在这里做错了什么? 顺便说一句,上面的代码通过以下脚本将程序移至profile.php: 问题答案: 您需要遍历结果(如TheSmose所述) 并且 您需要将结果数组发送到模板而不是。 改变这个 对此 如果您不只是想要模板中的内容(并且您不需要PHP> = 5.3 ),那么您将需要在循环内构建自

  • 本文向大家介绍php mysqli查询语句返回值类型实例分析,包括了php mysqli查询语句返回值类型实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了php mysqli查询语句返回值类型。分享给大家供大家参考,具体如下: 浏览器输出结果: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php+mysqli数据库程序设计技巧总结》、《PHP基于pdo操作数据库技巧总结》、