2009-08-08 61 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 2009-08-08 11:32:21

回答

5

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

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().

只要你不需要,你不需要調用此方法這個元數據。

$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是涼爽得多...... ;-)

$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「我想如果我選擇*出。 :) – ParisNakitaKejser 2009-08-08 12:07:46

+0

是的,PDO其很多easyere,我ges我有使用PDO之前我的機器人我該怎麼嘗試mysqli機器人現在我可以爲我maby不想去MySQLi機器人去PDO。 :)坦克很多的幫助。 – ParisNakitaKejser 2009-08-08 12:11:46

+0

PDO是兩者中最現代的。現在通常沒有理由使用其他任何東西。 – Nate 2009-08-08 13:41:26

3

,如果你想從數據庫中獲取的行,你需要的功能mysqli_stmt::fetch(),不mysqli_stmt::fetch_metadata()

你也缺少了幾步。使用預準備語句時,必須指定要返回的字段而不是使用星形通配符,然後使用mysqli_stmt::bind_result()指定應將數據庫字段放置在哪個變量中。

如果您更熟悉原始的MySQL擴展,準備好的語句有不同的使用過程。如果你的select語句有一個參數(例如,「WHERE value =?」),那麼絕對推薦準備好的語句,但對於你的簡單查詢,mysqli:query()就足夠了,與mysql_query()