Я знаю, что есть некоторые вопросы об этом, я пробовал, но никто из них не решил мою проблему. так вот моя проблема.
Я пытаюсь получить пользовательские данные, есть два параметра, если оба параметра доступны, код работает без проблем, но если параметр $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;
}
Вместо
$statement-> bind_param('ss',$words,$words);
тебе нужно
if ($words) {
$statement-> bind_param('ss',$words,$words);
}
Объяснение: Вам нужно добавить эти параметры тогда и только тогда, когда $words
является правдой.