我知道有一些问题,我试过,但没有一个解决了我的问题。所以这是我的问题。
我正在尝试获取用户的数据,需要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;
}
答案 0 :(得分:3)
而不是
$statement-> bind_param('ss',$words,$words);
你需要
if ($words) {
$statement-> bind_param('ss',$words,$words);
}
说明:当且仅当$words
为真时,您才需要添加这些参数。