복붙노트

[SQL] PHP는 mysqli 준비된 문장 LIKE

SQL

PHP는 mysqli 준비된 문장 LIKE

어떻게 mysqli와 난 등으로 쿼리를 만들고 모든 결과를 얻을 수 있습니까?

이것은 내 코드이지만 일을 dosn't :

$param = "%{$_POST['user']}%";
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?");
$stmt->bind_param("s", $param);
$stmt->execute();
$stmt->bind_result($id,$username);
$stmt->fetch();

이 코드는 작동하지 않습니다. 나는 그것을 많이 검색 한. 또한 그것은 1 개 이상의 행을 반환 할 수 있습니다. 더 1 행보다 반환하는 경우에도 어떻게 나는 모든 결과를 얻을 수 있습니까?

해결법

  1. ==============================

    1.여기에 제대로 결과를 가져 오는 방법

    여기에 제대로 결과를 가져 오는 방법

    $param = "%{$_POST['user']}%";
    $stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?");
    $stmt->bind_param("s", $param);
    $stmt->execute();
    $stmt->bind_result($id,$username);
    
    while ($stmt->fetch()) {
      echo "Id: {$id}, Username: {$username}";
    }
    

    또는 당신은 또한 할 수 있습니다 :

    $param = "%{$_POST['user']}%";
    $stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?");
    $stmt->bind_param("s", $param);
    $stmt->execute();
    
    $result = $stmt->get_result();
    while ($row = $result->fetch_array(MYSQLI_NUM)) {
      foreach ($row as $r) {
        print "$r ";
      }
      print "\n";
    }
    

    난 당신이 내가 먼저 갔어요해야하는 위치이다, 여기와 여기에 수동에서 직접 대답을 얻었다 실현되기를 바랍니다.

  2. ==============================

    2.의견에서 LIKE 와일드 카드 문자 (_and %)이 Paramaterised 쿼리에 기본적으로 탈출하지 않는 등 예기치 않은 결과가 발생할 수 있음을 알 수있다.

    의견에서 LIKE 와일드 카드 문자 (_and %)이 Paramaterised 쿼리에 기본적으로 탈출하지 않는 등 예기치 않은 결과가 발생할 수 있음을 알 수있다.

    "LIKE"문을 사용하는 경우 따라서 이러한 문자가 이스케이프하기 위해이 '부정적 예측'정규식을 사용합니다 :

    $param = preg_replace('/(?<!\\\)([%_])/', '\\\$1',$param);
    

    또한 따라서 MySQL의 CONCAT 기능을 사용 할 수 있습니다 위의 주어진 대답하는 대신 :

    $stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE CONCAT('%',?,'%') ");
    $stmt->bind_param("s", $param);
    $stmt->execute();
    

    어떤 편집을 $ PARAM 값을 필요로하지만, 약간 더 긴 쿼리 메이크업을하지 않는 것을 의미한다.

  3. from https://stackoverflow.com/questions/18527659/php-mysqli-prepared-statement-like by cc-by-sa and MIT license