如何选择与(名称,姓氏)或(姓氏,名称)串联匹配的所有记录

时间:2019-06-03 01:17:56

标签: php mysql sql

我正在使用ajax实时搜索来选择名称和姓氏串联与输入文本匹配的所有用户,并且效果很好:

$sql = "SELECT * FROM users WHERE concat(name,' ',surname ) LIKE ?";

现在,我想将相同的用户也使用相反的串联,即姓氏-名称。我已经尝试过了,但是没有用。

$sql = "SELECT * FROM users WHERE (concat(name,' ',surname ) LIKE ?) or (concat(surname,' ',name ) LIKE ?)";
if(isset($_REQUEST["term"])){
  // Prepare a select statement
  $sql = "SELECT * FROM users WHERE (concat(name,' ',surname ) LIKE ?) or (concat(surname,' ',name ) LIKE ?)";

  if($stmt = mysqli_prepare($conn, $sql)){
    // Bind variables to the prepared statement as parameters
    mysqli_stmt_bind_param($stmt, "s", $param_term);

    // Set parameters
    $param_term = $_REQUEST["term"] . '%';

    // Attempt to execute the prepared statement
    if(mysqli_stmt_execute($stmt)){
      $result = mysqli_stmt_get_result($stmt);

      // Check number of rows in the result set
      if(mysqli_num_rows($result) > 0){
        // Fetch result rows as an associative array
        while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
          echo "<p>" . $row["name"] . " " . $row["surname"] .  "</p>" 
        }
      } else{
        echo "<p>No matches found</p>";
      }
    } else{
      echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
    }
  }

  // Close statement
  mysqli_stmt_close($stmt);
}

我尝试匹配相同的用户,但收到消息:

  

错误:无法在用户所在的位置执行SELECT * FROM   (concat(name,'',surname)LIKE?)或(concat(name,'',surname)LIKE   ?)。

1 个答案:

答案 0 :(得分:0)

您在查询字符串中有两个占位符?,但仅将一个变量绑定到该语句。尝试再次绑定它,以便计数匹配。

mysqli_stmt_bind_param($stmt, "ss", $param_term, $param_term);