mysqli_stmt :: bind_result():绑定变量数与PHP中预准备语句中的字段数不匹配

时间:2016-08-22 08:53:59

标签: php mysql prepared-statement

简介:
这可能是 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();
        };
    };
?>

1 个答案:

答案 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 *选择您想要的单数列。