查询工作正常但不在预准备语句中工作

时间:2014-07-04 23:43:19

标签: php mysql sql mysqli prepared-statement

我有以下准备好的声明代码

// Get the data about the file
$stmt = $mysqli->prepare("SELECT * FROM file WHERE generated_name = ?");
$stmt->bind_param('s', $generated_name);
$stmt->execute();
if($stmt->num_rows == 0) return 'Error';

上面的代码不起作用,它总是会返回一个错误,即使它不应该是affected_rows也奇怪地返回-1。但是,如果我离开准备好的方法并进行正常查询..它完美地运行

// Get the data about the file
$result = $mysqli->query("SELECT * FROM file WHERE generated_name = '$generated_name'");
if($result->num_rows == 0) return 'Error';

此代码完美运行,不会返回错误。我不知道出了什么问题。你能否确定错误?

3 个答案:

答案 0 :(得分:3)

您可以在执行

后使用store_result
$stmt->store_result();
$rows= $stmt->num_rows;
if($rows > 0)...

答案 1 :(得分:2)

我相信你必须做“获取”来实际获取行; http://www.php.net/manual/en/mysqli.prepare.php

尝试添加此内容;

   $stmt->fetch();  
像这样;

// Get the data about the file
$stmt = $mysqli->prepare("SELECT * FROM file WHERE generated_name = ?");
$stmt->bind_param('s', $generated_name);
$stmt->execute();
$stmt->fetch();
if($stmt->num_rows == 0) return 'Error';  

答案 2 :(得分:1)

我相信在PHP手册中对num_rows的{​​{3}}评论解释了它。引用:

  

如果你不使用mysqli_stmt_store_result()和immediatley调用   执行准备好的语句后,此函数将执行此功能   通常返回0,因为它无法知道有多少行   结果集,因为结果集尚未保存在内存中。