記述が不十分なMySQLiからクリーンなPDOにサイトを移行したいと思います。
私は3つの同様の質問とその回答を見てきましたが、これは簡単な質問ですが、どれも私に結果を与えていません。これが私のコードです:
$state = "Alaska";
//trying to implement PDO here
$sql = "SELECT * FROM sales WHERE state = ? ORDER BY type";
$result = $conn->prepare($sql);
$result->execute(array($state));
/*
this was the old, successfully working way before
$sql = "SELECT * FROM sales WHERE state = '$state' ORDER BY type";
$result = $conn->query($sql);
*/
このサイトの以前の質問は、私のPDO実装のように見える答えを示していますが、私のものは機能しません。PDOクラスが存在し、拡張機能がロードされていることを確認しました。
エラーが表示された場合は、お知らせください。
ライブラリの違いは別として、2つの違いは、一方が直接query()
(the mysqli_*
)を使用し、もう一方がプリペアドステートメントを使用していることです。これらは、実行されているAPIに関係なく、少し異なる方法で処理されます。
MySQLiを使用する場合、
$result = $conn->query($sql);
必要があります$result
データを保持しているmysqliの結果オブジェクト、こと。mysqli_result::fetch_assoc()
その上でデータをフェッチするために使用できます。ただし、 を使用しているPDO::prepare()
場合、$result
変数は PDOStatement になります - これは少し異なります。fetch()
最初にメソッドを実行する必要があります。その後、その戻り値をそのまま使用できます。
$state = "Alaska";
$sql = "SELECT * FROM sales WHERE state = ? ORDER BY type";
$stmt = $conn->prepare($sql);
$stmt->execute(array($state));
$result = $stmt->fetch(PDO::FETCH_ASSOC);
変数の名前を変更したことに注意してください。これ$result
が配列です(フェッチされた結果がある場合)。これは、連想配列をフェッチするときに通常行うように使用できます。結果がない場合はPDOStatement::fetch()
、ブール値を返しfalse
ます。
var_dump($result['state']);
fetch()
メソッドを次のようにループできます
while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
複数の行が予想される場合。$result
上記のように、ループせずに使用します。
これは有効なPDO接続を前提としていることに注意してください。あなたがいることに注意してくださいすることができない、任意のMySQLのライブラリを交換mysql_
、mysqli_*
およびPDOは、動物園ですべての異なる動物です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加