2009-08-08 23 views
0

私はこのコードを作成しました:この準備文がMYSQLIで機能しないのはなぜですか?

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

print_r($object); 

私はそれを実行すると、それは動作しません。誰も私になぜそれが動作しないのか教えてもらえますか?

この表には20行ありますので、データを返す必要があります。 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().

から

+1

"動作しません " – Greg

答えて

5

$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は非常に簡単です、私はhavの前にPDOを使用してボットの前にmysqliボットを試してみてください。 :)タンクは助けをたくさん持っています。 – ParisNakitaKejser

+0

PDOはより現代的な2つです。今日では、通常、他に何かを使う理由はありません。 – Nate

3

あなたがデータベースから行を取得しようとしているならば、あなたが必要とする機能は、あなたがまた、いくつかの手順が欠落していないmysqli_stmt::fetch_metadata()

mysqli_stmt::fetch()です。プリペアドステートメントを使用する場合は、スターワイルドカードを使用する代わりに返すフィールドを指定してから、mysqli_stmt::bind_result()を使用してデータベースフィールドを配置する変数を指定する必要があります。

元のMySQL拡張、プリペアドステートメントは使用するプロセスが異なります。あなたのselectステートメントにパラメータ(例えば "WHERE value =?")がある場合は、準備されたステートメントが推奨されますが、簡単なクエリの場合はで十分であり、プロセスとあまり変わりません。mysql_query()

関連する問題