1

SQL クエリ文字列を MySQL フィールドに格納しようとしていますが、文字列を正しくエスケープするのに問題があります。

phpMyAdmin を使用して、テスト テーブルの sql varchar フィールドに次の文字列を挿入すると:

INSERT INTO `test` SET `test`.`sql`='{$_POST['sql']}'

phpMyAdmin を使用してエクスポートすると、次の SQL クエリが返されます。

INSERT INTO  `test`.`test` (`sql`)
VALUES ('INSERT INTO `test` SET `test`.`sql`=''{$_POST[''sql'']}''');

自分の php スクリプトでこれを行う場合、どの関数でエスケープしますか。

INSERT INTO `test` SET `test`.`sql`='{$_POST['sql']}'

次のようにします。

'INSERT INTO `test` SET `test`.`sql`=''{$_POST[''sql'']}'''

検索用に保存する必要がある多数の SQL クエリがあります。

作成する元の文字列に対して phpMyAdmin が行っていること:

INSERT INTO  `test`.`test` (`sql`)
VALUES ('INSERT INTO `test` SET `test`.`sql`=''{$_POST[''sql'']}''');

関数 xyz は次のとおりです。

$a = "INSERT INTO `test` SET `test`.`sql`='{$_POST['sql']}'";
$b = "INSERT INTO  `test`.`test` (`sql`)
VALUES ('INSERT INTO `test` SET `test`.`sql`=''{$_POST[''sql'']}''')";
$b = xyz($a);
4

2 に答える 2

4

mysql_real_escape_string()が必要です:

$sql = "INSERT INTO `test` SET `test`.`sql`='" . mysql_real_escape_string($_POST['sql']) . "'";
于 2012-05-31T10:12:19.780 に答える
-1

データベース内のコードを読み取る必要がなく(たとえば、phpMyAdminを介してコードにアクセスし、コードをコピーして貼り付ける)、PHPのみを使用して行う場合は、base64システムを使用してコードをエンコードできます。

エンコード用(データベースへの保存)

base64_encode($your_query);

デコード用(データベースからの取得)

base64_decode($your_result);

異なるものを含まない単一のファイルにすべてのクエリがあると仮定すると、このアプローチを試すことができます

$queryString = file_get_contents("queries.sql"); //reads the file and stores it as a single String
$queries = explode(';', $queryString);
foreach ($queries as $query)
  mysql_query( ... $query ... ); //Store each query in the database
于 2012-05-31T10:07:41.140 に答える