0

特定のタイプのテキストを挿入するMYSQLの問題

たとえば、これを挿入しようとすると:

INSERT INTO `Attacks_key` 
  (`Event_Key` ,`Variable` ,`Value` ,`Impact` ,`Tags`)
    VALUES 
  ('111', 'REQUEST', ' mysql_real_escape ', '222', 'xss, csrf, id, rfe, lfi');

挿入されましたが、これを挿入しようとすると:

INSERT INTO `Attacks_key` 
 (`Event_Key` ,`Variable` ,`Value` ,`Impact` ,`Tags`) 
   VALUES 
 ('111', 'REQUEST', 'mysql_real_escape_string($_POST['username']); ', '222', 'xss, csrf, id, rfe, lfi');

MYSQL は次のメッセージを表示します。

#1064 - SQL 構文にエラーがあります。'username' の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください]); ', '222', 'xss, csrf, id, rfe, lfi')' 1 行目

これは私のphpコードです

$user="root";
$password="*";
$database="*";
mysql_connect(localhost,$user,$password);
@mysql_select_db($database) or die( "Unable to select database");
$sql = "SELECT `Key_id` FROM `Event` ORDER BY `Key_id` DESC LIMIT 1";
$result =mysql_query($sql);
$row = mysql_fetch_assoc($result);
$EventKey= $row['Key_id'];
$query="INSERT INTO `PHPLOGS`.`Attacks_key` (`Event_Key` ,`Variable` ,`Value` ,`Impact` ,`Tags`) VALUES ('$EventKey', '$getname', '$getvalue', '$getimpec', '$gettags');";
mysql_query($query);
mysql_close();

および入力 'mysql_real_escape_string($_POST['username']); ユーザーから

誰か助けてくれませんか

ありがとう

4

3 に答える 3

0

文字通り挿入する場合はmysql_real_escape_string($_POST['username']);、一重引用符をエスケープしてください。

INSERT INTO `Attacks_key` 
 (`Event_Key` ,`Variable` ,`Value` ,`Impact` ,`Tags`) 
   VALUES 
 ('111', 'REQUEST', 'mysql_real_escape_string($_POST[\'username\']); ', '222', 'xss, csrf, id, rfe, lfi');
于 2012-07-11T11:30:56.260 に答える
0

非推奨の mysql_ 関数の代わりに PDO に切り替える必要があるため、PDO::quoteを使用できます。

PDO::quote() は、入力文字列を引用符で囲み (必要な場合)、基になるドライバーに適した引用スタイルを使用して、入力文字列内の特殊文字をエスケープします。

ただし、クエリを実行するための推奨される方法は、準備されたクエリを使用することです。その場合、引用符のエスケープの問題は発生しません。PDOのphpマニュアルページから再度引用:;引用

この関数を使用して SQL ステートメントを作成する場合は、PDO::quote() を使用してユーザー入力を SQL ステートメントに挿入する代わりに、PDO::prepare() を使用してバインドされたパラメーターを使用して SQL ステートメントを準備することを強くお勧めします。バインドされたパラメーターを持つ準備済みステートメントは、移植性が高く、便利で、SQL インジェクションの影響を受けないだけでなく、サーバー側とクライアント側の両方がクエリのコンパイルされた形式をキャッシュできるため、補間されたクエリよりも実行がはるかに高速です。

何らかの理由で PDO を使用できない場合は、同様の機能を持つmysqli_real_escape_stringがあります。

于 2012-07-11T11:37:11.633 に答える