我一定是错过了一些非常明显的东西,或者我可能完全以错误的方式做事,但是我已经看了好几年了,看不出我做错了什么。 / 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";
那么我做错了什么? `
答案 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这让我超越了登录页面的问题。