【问题标题】:error on bind_param , number of parameters in prepared statement doesn't matchbind_param 错误,准备好的语句中的参数数量不匹配
【发布时间】:2017-12-24 10:56:04
【问题描述】:

我知道对此有一些问题,我已经尝试过,但没有一个能解决我的问题。所以这是我的问题。

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

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

{"users":[{"id":53,"username":"paulpogba","email":"twitter.gadungan@gmail.com","avatar":"","fullname":"保罗 pogba"},{"id":56,"username":"waynerooney","email":"islam.idn@gmail.com","avatar":"","fullname":"wayne 鲁尼"}]}

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;


    }

【问题讨论】:

  • 如果 $wordsempty,则无需 bind_param。明白了吗?
  • 所以实际上这不是问题,对吧?因为当 $words 不可用时,这些 bind_param 永远不会被执行。我对吗?抱歉,我是编程初学者:D
  • 在你的代码中bind_param总是被执行

标签: php mysql


【解决方案1】:

代替

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

你需要

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

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

【讨论】:

  • 感谢 Lajos,但我的 $words 实际上是从移动应用程序发送的字符串,但它似乎是您代码中的布尔值。所以如果变量不为空,PHP 会自动给出真值?像其他编程语言中的!= nil?对不起,如果我问这个问题,我是 PHP 新手。谢谢:)
  • @AgungLaksana PHP 中有真值和假值。例如'abc'是真的,(!!'abc') === true。 ''是假的。但是,true 的 false 值不一定是 true 或 false,而是在逻辑上会被评估为更接近的逻辑值。
猜你喜欢
  • 2022-05-27
  • 2023-03-27
  • 1970-01-01
  • 2016-05-02
  • 2017-10-17
  • 2016-01-23
  • 2022-12-21
  • 1970-01-01
  • 2016-05-22
相关资源
最近更新 更多