PHP で PDO を使用して結果配列をフェッチする
SQL インジェクションの脆弱性を軽減するために、通常の代わりに PDO を使用しようとしています。 MySQL 接続。 PDO スクリプトが以前の MySQL スクリプトと同様の機能を提供するかどうか疑問に思うと、ジレンマが生じます。
元のスクリプト:
PDO スクリプト:
$pdo = new PDO('mysql:host=$host; dbname=$database;', $user, $pass); $stmt = $pdo->prepare('SELECT * FROM auction WHERE name = :name'); $stmt->bindParam(':name', $_GET['searchdivebay']); $stmt->execute(array(':name' => $name);
通常の MySQLスクリプト:
$dbhost = @mysql_connect($host, $user, $pass) or die('Unable to connect to server'); @mysql_select_db('divebay') or die('Unable to select database'); $search = $_GET['searchdivebay']; $query = trim($search); $sql = "SELECT * FROM auction WHERE name LIKE '%" . $query . "%'"; if(!isset($query)){ echo 'Your search was invalid'; exit; } //line 18 $result = mysql_query($trim); $numrows = mysql_num_rows($result); mysql_close($dbhost);
PDO フェッチ機能
通常の MySQL スクリプトで使用した while ループと同様の機能を実現するには、PDOStatement を利用できます。 .fetchAll メソッド。方法は次のとおりです:
$sth = $dbh->prepare("SELECT name, colour FROM fruit"); $sth->execute(); $result = $sth->fetchAll(\PDO::FETCH_ASSOC);
結果配列:
これは、各サブ配列に結果セットの行が含まれる連想配列の配列を返します。たとえば、次のコード サンプルは次の出力を生成します:
print_r($result);
出力:
Array ( [0] => Array ( [NAME] => pear [COLOUR] => green ) [1] => Array ( [NAME] => watermelon [COLOUR] => pink ) )
この配列構造により、各行のデータに簡単にアクセスでき、同等の機能が保証されます。以前の MySQL スクリプトにコピーします。
以上がPHP で PDO を使用して、MySQL の「mysql_fetch_array」と同様の機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。