ошибка в bind_param, количество параметров в подготовленном утверждении не совпадает

0

Я знаю, что есть некоторые вопросы об этом, я пробовал, но никто из них не решил мою проблему. так вот моя проблема.

Я пытаюсь получить пользовательские данные, есть два параметра, если оба параметра доступны, код работает без проблем, но если параметр $word недоступен, то у меня есть это предупреждение + правильный результат

Предупреждение: mysqli_stmt :: bind_param(): Число переменных не соответствует количеству параметров в подготовленном операторе в /Applications/XAMPP/xamppfiles/htdocs/Twitter/security/access.php в строке 379

{"users": [{"id": 53, "username": "paulpogba", "email": "[email protected]", "avatar": "", "fullname": "paul pogba" }, {"id": 56, "username": "waynerooney", "email": "[email protected]", "avatar": "", "fullname": "wayne rooney"}]}

результат JSON хорош, как я ожидаю. но я хочу опустить предупреждающее сообщение. проблема заключается в $statement-> bind_param('ss',$words,$words); Я считаю, что всего 2 ? в синтаксисе SQL.

Я не знаю, почему это указано. Количество переменных не соответствует количеству параметров в подготовленном сообщении, я не вижу, что тут не так :(

 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 ответ

3
Лучший ответ

Вместо

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

тебе нужно

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

Объяснение: Вам нужно добавить эти параметры тогда и только тогда, когда $words является правдой.

  • 0
    Спасибо, Лайос, но мои $ words - это строка, отправленная из мобильного приложения, но она выглядит как логическое значение из вашего кода. поэтому PHP автоматически дает истинное значение, если переменная не равна нулю? как! = ноль на другом языке программирования? извините, если я задам этот вопрос, я новичок в PHP. Спасибо :)
  • 0
    @AgungLaksana есть истинные и ложные значения в PHP. Например, «abc» - это правда, (!! «abc») === правда. '' это ложь. Однако истинность значения Falsey не обязательно является истинной или ложной, но логически будет оцениваться до логического значения, к которому она ближе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню