2

私はこの「古いスタイルの」非 PDO MySQL クエリを持っています (私が何を意味するかを正確に示すために、コードは厳密ではありません):

<?php
include('db_conn.php'); //Contains the connection info.

$category = 'cars';
$q = "SELECT * FROM `photos` WHERE `category` = '$category'";
$qResult = mysql_query($q);
$Numq = mysql_numrows($qResult);

$count = 0;
while ($count < $Numq)
{
$ThisID = mysql_result($qResult,$count,"id");
$ThisCaption = mysql_result($qResult,$count,"caption");
echo '<img src="images/'.$ThisID.'.jpg" alt="" />';
echo '<br />'.$ThisCaption.'<br /><br />';
$count++;
}
?>

クエリを PDO 形式で再キャストしたいと思います (これは学習中です)。私はこれを書いた:

<?php
//I've set out the connection info format in case there's anything wrong with it...
$db = new PDO('mysql:host=my_host;dbname=my_db_name;charset=UTF-8', 'db_user', 'user_password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); //I prefer to throw PHP errors.
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$category = 'cars';
$statement = $db->prepare("SELECT * FROM `photos` WHERE `category`=?");
$statement->execute(array($category));
$statement->setFetchMode(PDO::FETCH_BOTH);

while ($result = $statement->fetch()) {
//$result[0] = the ID, $result[1] = the caption...
echo '<img src="images/'.$result[0].'.jpg" alt="" />';
echo '<br />'.$result[1].'<br /><br />';
}
?>

...「古い」非 PDO フォームでは、列名を指定するだけで ID とキャプションをキャプチャできます。...しかし、PDO フォームでは $result[0] と $result[1] を指定する必要があります。... 配列のどのメンバーが ID で、どのメンバーがキャプションであるかなどを明示的に指定 (「記憶」) する必要がないように、PDO フォームを変更するにはどうすればよいですか (「古い」方法で許可されているように) ?

4

3 に答える 3

3

PDO::FETCH_BOTHas fetching モードを使用する代わりに、おそらくPDO::FETCH_ASSOC-- を使用してデータを連想配列として取得することをお勧めします。

$result['id']次に、、、$result['caption']などで配列のメンバーにアクセスできます。


PDO はいくつかの興味深いフェッチ モードをサポートしています。含む

  • 連想配列 : 配列のキーは、データベースから返される列名になります。これはおそらくあなたが慣れているものです
  • オブジェクト; 指定したクラスのインスタンスを含む

何が可能かを確認するには、さまざまなPDO::FETCH_*定数を調べてみてください。リストは次の場所にあります: Predefined Constants

于 2012-05-18T17:02:17.980 に答える
1
$statement->setFetchMode(PDO::FETCH_ASSOC);

ここで指定

于 2012-05-18T17:03:16.410 に答える
0

PDO::FETCH_BOTH連想配列とイテレータの両方で結果にアクセスできるようになっているので、うまくいくはずです。に変更してPDO::FETCH_ASSOC、それが機能するかどうかを確認することもできますが、*.

于 2012-05-18T17:04:25.387 に答える