【发布时间】: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;
}
【问题讨论】:
-
如果
$words为 empty,则无需bind_param。明白了吗? -
所以实际上这不是问题,对吧?因为当 $words 不可用时,这些 bind_param 永远不会被执行。我对吗?抱歉,我是编程初学者:D
-
在你的代码中
bind_param总是被执行。