2014-12-23 2 views
1

가져 오기 루프에서 세 변수에 바인딩하려고한다는 간단한 쿼리가 있습니다. 불행히도, 처음 두 컬럼을 집어 들고 3 번째 컬럼을 빈 문자열로 남겨 둡니다 ... 나는 어떤 생각을 잃어 버렸습니까?stmt bind_result()가 모든 열을 바인딩하지 않는다

$db = new mysqli("host.com", "username", "password", "db_name"); 

$q = "SELECT user_id, meta_key, meta_value FROM wp_usermeta WHERE (meta_key='first_name' OR meta_key='last_name') AND meta_value != '';"; 
$stmt = $db->prepare($q); 
$stmt->execute(); 
$stmt->bind_result($col1,$col2,$col3); 
while ($stmt->fetch()) { 
     echo $col1." - ".$col2." - ".$col3."<br />"; 
     } 

출력 :

2 - first_name - 
2 - last_name - 
5 - last_name - 
5 - first_name - 
6 - first_name - 
6 - last_name - 
8 - last_name - 
8 - first_name - 
9 - first_name - 
9 - last_name - 
+1

당신은 확인 했나 : 여기

는 작업 코드? 만약 그들이'sql null'이라면, 'meta_value! =' ''는 null을 그 자체를 포함하여 어떤 것과도 같을 수 없으므로이를 통과시킵니다. –

+0

'meta_value'가 NULL일까요? – dan08

+0

필자는 phpmyadmin에서 정확히 동일한 쿼리를 실행했고 모든 데이터를 완벽하게 반환했습니다. 데이터베이스에 확실히 NULL이 아닙니다. – Typel

답변

2

마지막으로이 알아 냈어. meta_value 필드는 longtext 데이터 형식입니다. 분명히 store_result를 사용하기 전에 longtext 필드를 바인딩하려고하면 PHP는 그 결과에 어떤 종류의 오류나 경고를주지 않고 빈 문자열을 반환합니다. 실제로 메타 값이있는 경우

$db = new mysqli("host.com", "username", "password", "db_name"); 

$q = "SELECT user_id, meta_key, meta_value FROM wp_usermeta WHERE (meta_key='first_name' OR meta_key='last_name') AND meta_value != '';"; 
$stmt = $db->prepare($q); 
$stmt->execute(); 
$stmt->store_result(); 
$stmt->bind_result($col1,$col2,$col3); 
while ($stmt->fetch()) { 
     echo $col1." - ".$col2." - ".$col3."<br />"; 
     } 
관련 문제