简介:
这可能是 Stackoverflow 中已经提到的一些问题的重复。我是PHP编程的新手,我尝试对我的代码进行一些“试验”。好吧,我使用 Ajax,PHP5,MySQL 创建了一个用户/用户名搜索器。
我想做什么/修复:
我正在尝试进行用户名搜索[我看似已完成并正常工作]但是当您搜索用户名时,有关该帐户的信息将会显示出来。例如,我搜索了 virtualAnon ,他的名字和信息,例如 first_name 将显示在他的用户名之后。
试图修复但是......
我试图通过将$query = "SELECT username FROM users WHERE username like ? LIMIT 1";
替换为$query = "SELECT * FROM users WHERE username like ? LIMIT 1";
来解决此问题,但在我尝试之后,错误
mysqli_stmt :: bind_result():绑定变量数不匹配 PHP中预准备语句中的字段数
出现。
这是获取用户名和数据库的PHP文件:
<?php
if($_GET['keyword'] && !empty($_GET['keyword']))
{
$conn = mysqli_connect('localhost','root','','loginsecure'); //Connection to my database
$keyword = $_GET['keyword'];
$search = $_GET['keyword'];
$keyword="%$keyword%";
$query = "SELECT * FROM users WHERE username like ? LIMIT 1";
# When I tried to SELECT *, It gives me the error of: Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in ...\fetch.php on line 22
$statement = $conn->prepare($query);
$statement->bind_param('s',$keyword);
$statement->execute();
$statement->store_result();
if($statement->num_rows() == 0) // so if we have 0 records acc. to keyword display no records found
{
echo '<div id="item">Sorry, but there is no user "'.$search.'" found in our database :(</div>';
$statement->close();
$conn->close();
}
else {
$statement->bind_result($name); # There is a error i'm encountering when I try to Select * from the line 8.
while ($statement->fetch()) //outputs the records
{
echo "<div id='item'><a href=\"../user/username.php?username=$name\">$name</a></div>";
# It supposed to show more information about the user, by using $name['first_name'] or $name['last_name']
};
$statement->close();
$conn->close();
};
};
?>
答案 0 :(得分:0)
您遇到的问题是mysqli_stmt::bind_result
会尝试将结果集中的每一列绑定到变量。这意味着您需要与列相同数量的变量。如果要返回两列,则需要将它们绑定到两个变量。
在$statement->bind_result($name);
中,您说There's only going to be one column, so bind it to $name
而您的查询(SELECT * FROM users WHERE username like ? LIMIT 1
)正在获取该表的所有列。
因此,解决方案是仅通过SELECT name
而不是SELECT *
选择您想要的单数列。