0

ユーザーが入力したデータを使用してsqliteデータベースを操作する非常に単純なWebアプリをまとめていますが、文字列の「サニタイズ」では不十分であり、さらに問題が発生する可能性があることに気づきました。私はそれを理解しているので、プリペアドステートメントを使用する必要があります。私の調査では、prepare関数を持つPDO(phpデータオブジェクト)があり、phpsqlite3拡張機能もprepareステートメントを提供していることがわかりました。重要な場合は、この時点でデータベースにログインや機密情報はありません。

PDOは私には「エイリアン」のように見え、なぜ/どのように使用する必要があるのか​​よくわかりません。コードをコピーして貼り付けて機能させることはできますが、その「アイデア」は私を逃れます。

ですから、問題は、PDOまたはsqlite3のprepare関数が最適であり、その理由を簡単に説明できるかどうかだと思います。

どうもありがとう、トッド

4

2 に答える 2

2

PDO拡張機能は、多くの異なるデータベースへのアクセスを統合するラッパーです。記述しているSQLクエリに互換性がある限り、の別のデータベースに接続するだけでデータベースを切り替えることができnew PDO(...)、残りのコードに触れる必要はありません。

sqlite3拡張機能は、SQLiteデータベースでのみ機能します。後で別のデータベースに接続する場合は、sqlite3関数を使用するすべてのコードを書き直す必要があります。

それを除けば、プリペアドステートメントとそれらがどのように機能するかは、これら2つの拡張機能間で基本的に同じです。PDOに投票します。これは、長期的には柔軟性が高く、1つのインターフェイスを学習するだけで多くの異なるデータベースを使用できるためです。もちろん、それらを混合することはできません。どちらか一方を排他的に使用する必要があることに注意してください。prepareどちらか一方の方法を使用することはできませんexecute

于 2012-06-18T13:56:53.927 に答える
2

真剣に、データベースの相互作用を利用するためにWebアプリの構築を開始する場合は、PDOの知識を得ることができます。これは、金の価値があり、OOPスタイルのコーディングについてさらに学ぶのに役立つでしょう。注射から常に安全であると述べています。

詳細に立ち入ることなく、PDOは多くの種類のデータベースを処理でき、構文もほぼ同じであるため、モデルを構築すると、他のデータベースに簡単に移植できます。ここにPDOに関する素晴らしいチュートリアルがあります

<?php 
//Connect this creates a new PDO object
$db = new PDO('sqlite:/path/to/database.sdb');

//Build your sql query with parameters :field 
$sql = "SELECT * FROM sometable WHERE someCol=:field";
//Prepare the above query
$statement = $db->prepare($sql);
//Bind the value received from the form or such with the parameter place holder
$statement->bindParam(':field', $_POST['someVal']);
//Execute the prepared query
$statement->execute();
//Fetch the result
$result = $statement->fetchAll(PDO::FETCH_ASSOC);


//Treat the result as a pure array
foreach ($result as $row){
    //do something
}
?>

インターネット上には、私よりもよく説明しているチュートリアルがたくさんありますが、mysql_ *関数が消えたときに、将来さらに使用するようになるので、PDOを理解してください。それが役に立てば幸い

于 2012-06-18T14:13:13.997 に答える