PHP는 mysqli 준비 성명
PHPPHP는 mysqli 준비 성명
어떻게하면 mysqli가 LIKE로 질의를하고 모든 결과를 얻을 수 있습니까?
이것은 내 코드이지만 작동하지 않습니다.
$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.결과를 올바르게 가져 오는 방법은 다음과 같습니다.
결과를 올바르게 가져 오는 방법은 다음과 같습니다.
$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.주석에서 Paramaterised 쿼리에 대해 LIKE 와일드 카드 문자 (_and %)가 기본적으로 이스케이프되지 않으므로 예기치 않은 결과가 발생할 수 있습니다.
주석에서 Paramaterised 쿼리에 대해 LIKE 와일드 카드 문자 (_and %)가 기본적으로 이스케이프되지 않으므로 예기치 않은 결과가 발생할 수 있습니다.
따라서 "LIKE"문을 사용할 때 이러한 '음수 미리보기'Regex를 사용하여 이러한 문자가 이스케이프되는지 확인하십시오.
$param = preg_replace('/(?<!\\\)([%_])/g', '\\\$1',$param);
위의 답변에 대한 대안으로 MySQL CONCAT 함수를 사용할 수도 있습니다 :
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE CONCAT('%',?,'%') "); $stmt->bind_param("s", $param); $stmt->execute();
즉, $ param 값을 편집 할 필요가 없지만 약간 더 긴 쿼리를 작성합니다.
from https://stackoverflow.com/questions/18527659/php-mysqli-prepared-statement-like by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
ADOdb의 SQL 주입 및 일반적인 웹 사이트 보안 (0) | 2018.09.18 |
---|---|
PHP 연관 배열 중복 키 (0) | 2018.09.18 |
사용되지 않는 preg_replace / e를 preg_replace_callback [duplicate] (0) | 2018.09.17 |
"잘못된 매개 변수 번호 : 매개 변수가 정의되지 않았습니다"데이터 삽입 (0) | 2018.09.17 |
_GET의 최대 URL 매개 변수 크기 (0) | 2018.09.17 |