在php中使用bind_param()时出错

时间:2017-09-01 15:24:16

标签: php mysqli bindparam

在使用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>';

      }

    }
  }

1 个答案:

答案 0 :(得分:1)

您需要将值绑定到查询字符串中的占位符?。然后你需要查看传递给bind_param()的参数 - 第一个参数应该是变量的类型 - 在这种情况下,$search只是一个字符串,所以第一个参数应该是{{1 }}。

此外,您应该注意s属性,而不是方法。此属性可能不准确(即,在获取结果之前可能显示零行),除非您首先使用$stmt->num_rows存储结果。这两个都需要在执行之后

然后您需要使用$stmt->store_result()绑定结果。这意味着绑定查询选择的每个列。因此,最好选择您要查找的特定列,而不是bind_param()。当你现在获取时,它应该是提供给SELECT *的单个参数,而不是将其赋值给变量。

while