mysqli准备SELECT不工作

时间:2014-03-09 14:05:23

标签: php mysqli prepared-statement

我一定是错过了一些非常明显的东西,或者我可能完全以错误的方式做事,但是我已经看了好几年了,看不出我做错了什么。 / p>

我只想尝试从表中检索记录。这并不难;它只是不工作!

我的代码是

$sql = $db->prepare("SELECT * FROM user WHERE user_name=? AND user_pass=?");
$sql->bind_param('ss', $username, $password);
$result = $sql->execute();

echo "<!-- rows = $result->num_rows -->\n";

只接受$ db是一个有效的连接,并且在实际代码中也有错误检查语句。问题是,它没有找到一行并且它没有返回错误,实际上$ result-&gt; num_rows甚至不为零;它只是空着。

以下代码完美无缺......

$sql = "SELECT * FROM user WHERE user_name='$username' AND user_pass='$password'";
$res = $db->query($sql);

echo "<!-- rows = $res->num_rows -->\n";

那么我做错了什么? `

2 个答案:

答案 0 :(得分:2)

mysqli_stmt execute方法返回一个布尔值。要获取行数,请使用$sql->num_rows而不是$res->num_rows

答案 1 :(得分:-1)

关于将SELECT与预处理语句一起使用,似乎有太多的混乱和错误信息。使用us3.php.net的文档让我尝试使用一个根本不存在的函数!

我似乎缺少的是store_result语句,所以逻辑更像是......

    $sql = $db->prepare("SELECT * FROM user WHERE user_name=? AND user_pass=?");
    $sql->bind_param('ss', $username, $password);
    $sql->execute();
    $sql->store_result();
    echo "<!-- rows = $sql->num_rows -->\n";

我希望这可以帮助那些试图让最简单的操作工作的人!

我仍然没有弄清楚我是如何(或者如果)我可以做一些像$ row = $ something-&gt; fetch_object()或者如果我不得不对我的所有表格列使用bind_result但是在keast这让我超越了登录页面的问题。