PHP で値を取得した後にその値をフォーマットする方法
データベースには 2 つのフィールドを持つテーブルがあります
id int (5)
content text
その後、フォームは次のようなものです
$content=$_POST['content'];<br />$sql="insert into dbname (`id`,``) values(null,'$content')":<br /><br /><br /><form action="" method="post"><br /><textarea name="content"><br /><br /></textarea><br /><br /></form>
ログイン後にコピー
問題は、このフォームに単一引用符、二重引用符、または !@#$$% などの類似した記号を多数記述すると、 、SQL を出力すると、挿入は失敗します。値を挿入するときに一重引用符を使用したため、競合が発生するはずです。送信された値にも一重引用符が含まれている場合、それは不明であるはずです。 >
-----解決策----------------------
挿入する前にエスケープしてください
転送は一度だけ必要です
$content = mysql_escape_string($_POST['content']);
$sql = "insert into dbname (`id`,`content`) names(null,'$content') ":
参考: http://php.net/manual/zh/function.mysql-escape-string.php
-----ソリューションのアイデア-- --- ------------------
答えは上の階で答えられています
ここで一般的な紹介をします:
Mysql_real_escape_string は主にデータベース用ですインジェクションの防止とステートメントの正確性 必要に応じて、読み取りステートメントと書き込みステートメントの文字が変換されます。
ただし、最終的にデータベースに書き込まれる内容は、エスケープされる前の内容のままです。エスケープ前の元の内容
たとえば、文字列 aaaa"aaaa をデータベースに挿入する場合、insert into table names("aaaa"aaaa"); とすると、ステートメントは間違っています。 mysql_real_escape_string を使用して aaaa"aaaa; にエスケープします。最終的に、ステートメントは insert into table names("aaaa"aaaa") になります。
ただし、selecting * from table によって得られる最終的な内容は、依然として aaaa"aaaa