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

时间:2014-04-08 22:37:08

标签: php mysql sql mysqli prepared-statement

我有一个传统的查询可以正常工作,如下所示:

$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.为什么传统查询会起作用,但是准备好的语句不是在它们是同一个查询字符时?此外,我意识到包括干墙在内。在准备好的查询字符串中运行与准备语句的目的相反,但我只是想消除bind_param()是罪魁祸首的可能性。所以我使用bind_param()来填充占位符,并且它也没有工作,尽管我在运行时仔细检查我绑定的变量包含正确的值。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我想你想用

$stmt->store_result();

之前

$stmt->num_rows();

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

答案 2 :(得分:0)

你有没有试过这样的事情:

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

PS:

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

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