1

ここでは、MySQLとクエリの設計に関連する多くの質問を見つけました。私たちが常に最初に言うのは、「mysql_*関数を使用しないでください。これらは非推奨になっています」です。そこで、PHPプログラムでPDO接続を設定するためのクイックガイドを追加して、ここで新しいPHP開発者を紹介し、プログラムの安全性を高めることができるようにしようと思いました。

PHPとPDOの経験がある場合は、PDOの初心者にとってこれをより便利にするために、必要に応じて自由に編集および追加してください。

4

1 に答える 1

4

ステップ1: 新しいPDO接続を設定する

これは、時々考えられるほど難しくはありません。まず、これらのmysql_connect / mysql_select_dbを探し出し、次のコードに置き換えることができます。

//Obviously, replace these with your own values
$host = 'host_name';
$dbname = 'database_name';
$user = 'user_name';
$pass = 'user_pass';
try
{
    $DB = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
}
catch(PDOException $e)
{  
    echo $e->getMessage();  
}

これにより、mysql_*呼び出しと同じ機能をすべて備えたPDOオブジェクトが作成されます。

ステップ2: クエリを送信する

PDOオブジェクトを取得したら、それを使用してデータベースにクエリを実行できます。使用する手法はほとんどのクエリタイプで類似しているため、最初に基本的なselectクエリを見ていきます。これで、直接クエリを実行できますが、PDOの機能の一部が失われます。代わりに、プリペアドステートメントを使用できます。そうすることで、PDOは、インジェクションや偶発的なクエリの破損を防ぐために機能します。次に例を示します。

$query = "SELECT * FROM table_name WHERE col1=':value1' AND col2=':value2'";
$statement = $DB->prepare($query);
$statement->execute(array(':value1' => 1, ':value2' => 2));

この時点で、データベースにクエリを実行し、結果を含むステートメントオブジェクトを作成しました。ここでの利点は、executeステートメントの1または2の代わりに、SQLインジェクションの試行をチェックしなくても、ユーザーが生成した値を使用できることです。これは、PDOがそれらをキャッチして自動的に修正するためです。(もちろん、ユーザーが生成した値を使用する前に、それらが存在することを確認する必要があります。)

ステップ3: 結果を取得する

次に、検索したデータを取得して、それを使用できるようにする必要があります。PDOを使用すると、非常に簡単です。必要なのは、以前にmysql_fetch_array()コマンドを使用した場合と同じように、fetchコマンドを呼び出すことだけです。また、 mysql_fetch_array()とほぼ同じように機能するため、すべての結果を取得するためにwhileループに含めることもできます。

//You can use several options in fetch, to determine what kind of results you get.
//PDO::FETCH_ASSOC -> gives you column names as the array indices
//PDO::FETCH_NUM   -> Gives you the column number as the indices
// By default, it uses PDO::FETCH_BOTH which does both.
while($row = $statement->fetch(PDO::FETCH_ASSOC))
{
     echo "Col1: " . $row['col1'] . "<br />";
     echo "Col2: " . $row['col2'] . "<br />";
     echo "Col3: " . $row['col3'] . "<br />";
     echo "Col4: " . $row['col4'];
}

明らかに、これは非常に単純なレイアウトですが、どのように機能するかを確認し、必要に応じて変更することができます。これは、現在のmysql_ *コードとまったく同じことを行いますが、より単純でより安全な方法で行う点が異なります。

ステップ4: 可能性

ここから、基本的なmysql_*関数を置き換える方法を確認できます。他のすべてのmysql関数をPDO呼び出しに置き換えることもできます。いくつかの例を次に示します。

mysql_num_rows() == $ statement-> rowCount()(クエリの実行後に使用) mysql_real_escape_string() ==これはもう必要ありません!
mysql_insert_id() == $ statement-> lastinsertid()

PHPのPDO使用法の最も信頼のおけるガイドは、http:
//us3.php.net/manual/en/book.pdo.phpにあります。

そして、ここにmysqliとPDOの長所と短所を調べる質問があります:
mysqliまたはPDO-長所と短所は何ですか?

于 2012-10-31T18:49:16.337 に答える