bind_param上的错误,预处理语句中的参数数量不匹配

时间:2017-12-24 10:56:04

标签: php mysql

我知道有一些问题,我试过,但没有一个解决了我的问题。所以这是我的问题。

我正在尝试获取用户的数据,需要2个参数,如果两个参数都可用,代码无缝运行,但如果$word参数不可用,那么我有这个警告+正确的结果

  

警告:mysqli_stmt :: bind_param():变量数量与预备语句中的参数数量不匹配   /Applications/XAMPP/xamppfiles/htdocs/Twitter/security/access.php on   第379行

     

{"用户":[{" ID":53,"用户名":"保罗·博格巴""电子邮件&# 34;:" twitter.gadungan@gmail.com","化身":"""全名":"保   pogba"},{" ID":56,"用户名":"韦恩·鲁尼""电子邮件":"伊斯兰教.idn @ gmail.com""化身":"""全名":"韦恩   鲁尼"}]}

JSON结果和我期望的一样好。但我想省略警告信息。问题出在$statement-> bind_param('ss',$words,$words);我相信SQL语法中只有2 ?

我不知道为什么说变量的数量与预备语句中的参数数量不匹配,我在这里看不出有什么问题:(

 function searchUsers ($currentUser,$words) {


        $query = "SELECT id,username,email,avatar,fullname FROM users WHERE NOT username= '$currentUser'";

        if (!empty($words))  {
            $query .= "AND (username LIKE ? OR fullname LIKE ?)";
        }


        $statement = $this->conn->prepare($query);

        if (!$statement) {
            throw new Exception($statement->error);
        }



        if (!empty($words)) {
            $words = "%".$words."%";
        }



        $statement-> bind_param('ss',$words,$words);
        $statement ->execute();

        // result we got in execution
        $result = $statement->get_result();

        // each time append to $returnArray new row one by one when it is found
        while ($row = $result->fetch_assoc()) {
            $returnArray[] = $row;
        }

        return $returnArray;


    }

1 个答案:

答案 0 :(得分:3)

而不是

$statement-> bind_param('ss',$words,$words);

你需要

if ($words) {
    $statement-> bind_param('ss',$words,$words);
}

说明:当且仅当$words为真时,您才需要添加这些参数。