繁体   English   中英

MySQLi预处理语句失败,相同的常规查询成功

[英]MySQLi prepared statement fails where identical regular query succeeds

我有一个传统的查询,工作正常,看起来像这样:

$result = $mysqli->query("SELECT value FROM activities WHERE name = 'Drywall'");

这成功返回一行。 但是,为了诊断我正在使用预备语句的问题,我尝试了一个相同的查询作为预备语句,如下所示:

$stmt = $mysqli->prepare("SELECT value FROM activities WHERE name = 'Drywall'");
$stmt->execute();

尽管这些是相同的查询字符串,但$ stmt-> num_rows始终为0.为什么传统查询会起作用,但是准备好的语句不是在它们是完全相同的查询时? 此外,我意识到在准备好的查询字符串中包含'Drywall'与准备语句的目的背道而驰,但我只是想消除bind_param()是罪魁祸首的可能性。 所以我使用bind_param()来填充占位符,这也不起作用,尽管我在运行时仔细检查我绑定的变量包含正确的值。

检查mysqli-> prepare的正确使用。 该函数取决于要传递的参数。 它与直接在查询中传递值不同,但可以使用其他方式。
验证手册:
http://www.php.net/manual/pt_BR/mysqli.prepare.php

我想你想用

$stmt->store_result();

在通话之前

$stmt->num_rows();

请参阅手册中$ stmt-> num_rows()的最后一行描述( http://www.php.net/manual/en/mysqli-stmt.num-rows.php )。

你尝试过这样的事情:

$stmt = $mysqli->prepare("SELECT value FROM activities WHERE name = 'Drywall'");
$stmt->execute();
$res = $stmt->get_result();
$row = $res->fetch_assoc();

PS:

准备好的陈述很好。 我会敦促你总是考虑使用它们。

但在这种情况下,一个简单的查询将比准备好的语句更有效(会导致更少的往返)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM