この投稿の最終編集者は sky94132003 2014-06-10 03:40:33 私はまだ php の初心者です
最近始めたばかりですpdo を使用してください
アドバイスをお願いしますmysql_real_escape_string
については以前は知っていましたが、最近、pdo では mysql_real_escape_string
を使用できないことを知りました。この関数は、最初に接続するために mysql_connect() を使用しているようです。使用すると便利です
前処理と連携するには、bindParam やその他の書き込みメソッドを使用する必要があることもわかっています
$stmt = $ dbh->prepare ("INSERT INTO user (firstname, lastname ) VALUES (:f-name, :s-name)");
$stmt ->bindParam(':f-name', 'John' );
$stmt ->bindParam(': s-name', 'Smith');
$stmt ->execute();
お聞きしたいのですがbindingParam が十分に安全であれば?
bindValue を使用する方が良いでしょうか?
2 つの提案 mysql_real_escape_string より面倒?
mysql_real_escape_string の処理後....write データベースに入るとき
Tom's Book は PHP では Tom's Book
として表示されますが、データベースに書き込むときは、Tom's Book
のみが保存されます。最前面に表示すると、純粋な SELECT にはセキュリティ上の問題がないはずなので、非常に便利です。
しかし、ここで問題が発生します。問題
bindParamはデータベースに保存しても自動的にエスケープされるため、フロントデスクのどこでstripslashes()関数を使用する必要があるのかわかりません。
難易度は上がりますか?
この問題の可能性は 3 つだけですよね?
1. PDO で SQL インジェクションを防ぐ他の方法はありますか?保存していますか?
2. 設定ファイルに何か追加されている可能性があります...サイト全体にスラッシュを追加します() それは不可能だと思われますか?
3. 正直に言うと、日付またはカテゴリを除きます。 ID を 1 つずつ追加していきますか?
私もアドバイスを求めたいです。
$stmt = $dbh->prepare ("INSERT INTO user (firstname, lastname. ) VALUES (:f-name, :s-name)");
$stmt ->bindParam(':f -name', 'John');
$stmt ->bindParam(': s-name', 'Smith');
$stmt ->execute();
以外に、このタイプの書き方は妥当ですか?
公式は、PDO を使用する場合は 5.3.6 にアップグレードする必要があるとも示唆していますが、5.4 に直接アップグレードする方がよいでしょうか?
------解決策-------------------------- 前処理後に実行する方法と、パス
を直接クエリする方法の 2 つのオプションがあります。 quote はエスケープであり、前処理された実行は自動的に暗黙的に実行されます
クエリの場合は明示的に実行する必要があります