我有以下准备好的声明代码
// 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';
此代码完美运行,不会返回错误。我不知道出了什么问题。你能否确定错误?
答案 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,因为它无法知道有多少行 结果集,因为结果集尚未保存在内存中。