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 回答