2009-08-08 4 views
0

이 코드를 만들었습니다 :왜 이것이 MYSQLI에서 성명서 작업을 준비하지 못합니까?

$statement = $db->prepare("SELECT * FROM phptech_contact"); 
$statement->execute(); 
$result = $statement->result_metadata(); 
$object = $result->fetch_object(); 

print_r($object); 

실행할 때 작동하지 않습니다. 아무도 왜 그것이 작동하지 않는지 말해 줄 수 있습니까?

이 테이블에는 20 개의 행이 있으므로 데이터가 리턴되어야합니다.

+1

의 프로세스와 크게 다르지 않습니다. 작동하지 않습니다 " – Greg

답변

5

만큼 당신이이 메소드를 호출 할 필요없는이 메타 데이터를 필요로하지 않는 Note: The result set returned by mysqli_stmt_result_metadata() contains only metadata. It does not contain any row results. The rows are obtained by using the statement handle with mysqli_stmt_fetch().

http://ch.php.net/manual/en/mysqli-stmt.result-metadata.php에서.

$statement = $db->prepare("SELECT fld1, fld2 FROM phptech_contact"); 
$statement->execute(); 
$stmt->bind_result($fld1, $fld2); 

while ($stmt->fetch()) { 
    echo "$fld1 and $fld2<br />"; 
} 

하지만 실제로는 mysqli 확장자를 싫어합니다. PDO 내가 문제가 mysqli_stmt::result_metadata()는 단지 메타 데이터를 보유하고 실제 결과 —의없이 mysqli_result 객체를 반환 믿습니다 ... ;-)

$db = new PDO('...'); 
$stmt = $db->prepare("SELECT fld1, fld2 FROM phptech_contact"); 
$stmt->execute(); 

while ($obj = $stmt->fetchObject()) { 
    // ... 
} 

또는

$objs = stmt->fetchAll(PDO::FETCH_OBJ); 
+0

나는 당신을"$ fld1 "과"$ fld2 "내가 * out을 선택하면 생각합니다. :) – ParisNakitaKejser

+0

그리고 예, PDO의 많은 easyere, 나는 내가 hav 사용하기 전에 PDO 봇 내가 무엇 mysqli 봇을 시도 할 수 있습니다 지금 나는 내가 MySQLi 봇에 가고 싶지 않아 PDO로 이동합니다. :) 탱크는 많은 도움을 준다. – ParisNakitaKejser

+0

PDO는 더 현대적입니다. 요즘에는 보통 다른 것을 사용할 이유가 없습니다. – Nate

3

데이터베이스에서 행을 얻으려고 노력하는 경우, 당신이 필요로하는 기능, 당신은 또한 몇 가지 단계를 놓치고하지 mysqli_stmt::fetch_metadata()

mysqli_stmt::fetch()입니다. 준비된 문을 사용할 때는 별표 와일드 카드를 사용하는 대신 반환 할 필드를 지정한 다음 mysqli_stmt::bind_result()을 사용하여 데이터베이스 필드를 배치 할 변수를 지정해야합니다.

원래 MySQL 확장, 준비된 진술을 사용하는 다른 프로세스가 있습니다. select 문에 매개 변수가 있으면 (예 : "WHERE value =?") 준비된 문이 좋습니다. 그러나 간단한 쿼리의 경우 mysql_query()

관련 문제