在使用bind_param()
时我一直收到以下错误,并尝试了一切来修复它,但似乎没有任何效果。
警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数量与绑定变量数量不匹配
这是我的代码
$output = '';
$output2 = '';
$output3 = '';
if(isset($_POST['search'])) {
$search = $_POST['search'];
$search = preg_replace("#[^0-9a-z]i#","", $search);
if ($stmt = $db->prepare("SELECT * FROM Users WHERE name LIKE '%$search%'")){
$stmt->bind_param("s", $search);
$count = $stmt->num_rows();
$stmt->execute();
if($count == 0){
$output = "There was no search results!";
}else{
while ($rows = $stmt->num_rows) {
$name = $row ['name'];
$location = $row ['location'];
$gender = $row ['gender'];
$date_of_birth = $row ['date_of_birth'];
$picture = $row['url'];
$output .='<form action="header.php" method="post"><div class="row"><div class="col-sm-3">'.$name.'<br>'.$location.'<br>'.$gender.'<br>'.$date_of_birth.'</div>';
$output2 = '<div class="col-sm-3"><img src="upload/'.$picture.'"width="180" height="144" /></div></div>';
$output3 = '<input id="add_friend" name= "addfriend" type="submit" value="Add As Friend" /></form>';
}
}
}
答案 0 :(得分:1)
您需要将值绑定到查询字符串中的占位符?
。然后你需要查看传递给bind_param()
的参数 - 第一个参数应该是变量的类型 - 在这种情况下,$search
只是一个字符串,所以第一个参数应该是{{1 }}。
此外,您应该注意s
是属性,而不是方法。此属性可能不准确(即,在获取结果之前可能显示零行),除非您首先使用$stmt->num_rows
存储结果。这两个都需要在执行之后。
然后您需要使用$stmt->store_result()
绑定结果。这意味着绑定查询选择的每个列。因此,最好选择您要查找的特定列,而不是bind_param()
。当你现在获取时,它应该是提供给SELECT *
的单个参数,而不是将其赋值给变量。
while