我有一个传统的查询可以正常工作,如下所示:
$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()来填充占位符,并且它也没有工作,尽管我在运行时仔细检查我绑定的变量包含正确的值。
答案 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:
准备好的陈述很好。我会敦促你总是考虑使用它们。
但在这种情况下,一个简单的查询会比准备好的语句更有效率(会导致更少的往返)。