2013-08-30 3 views
29

mysqli로 LIKE로 질의를하고 모든 결과를 얻을 수있는 방법은 무엇입니까?PHP mysqli prepared statement LIKE

이 내 코드이지만 일을 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(); 

가 작동하지 않는 것이 코드. 나는 그것을 많이 찾았다. 또한 하나 이상의 행을 반환 할 수 있습니다. 그렇다면 두 개 이상의 행을 반환하더라도 모든 결과를 얻을 수 있습니까? 나는 희망

$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"; 
} 

당신은 내가 수동 herehere에서 직접 대답을 얻었다 실현 곳이다 : 여기

+1

"작동하지 않습니다"- PHP 오류를 정의하십시오. MySQL 오류? 오류는 없지만 결과는 0입니까? –

+0

모든 결과를 반복하고 싶습니다. 내가 어떻게 할 수 있니? 내가 말할 때 작동하지 않습니다. 아무 것도 반환하지 않습니다 ... – user2493164

+0

이 코드에는 반환 연산자가 없습니다. ** 무엇을 반환해야합니까? ** –

답변

48

은 제대로 결과

$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 값을 편집 할 필요는 없지만 약간 더 긴 쿼리를 만들 않는 것을 의미

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

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

+2

OP를 방어하기 위해 어느 쪽의 페이지도 LIKE 비교 "함수"에 대한 언급이 없습니다 –

21

.

+0

안녕하세요? SQL 삽입에서 concat 안전합니까? 따옴표가 있기 때문에 묻습니다. 감사합니다 –

+0

@mikevorisis 예, 쿼리가 여전히 매개 변수화되어 있기 때문에 안전합니다 (*'?'* 사용). 따옴표는 MySQL이 3 개의 문자열을 연결하기 때문입니다. – Martin

+0

괜찮습니다. @Martin –