将数据导出为.sql格式.怎么逃避?

Eve*_*ert 6 php mysql sql sqlite escaping

我正在编写一个导出工具,将输入的json数据转换为sql语句.

这个工具是(并且不应该)知道数据库连接,它应该只输出一个.sql,可以与其他工具一起使用来进行实际导入.

大多数mysqli - >*和PDO相关的函数都依赖于一个开放的连接(以确定像characterset这样的东西).有什么好办法可以解决这个问题?

Spu*_*ley 2

MySQL 函数需要连接才能转义字符串的原因是,它所做的只是mysql_real_escape_string()调用 MySQL 的内置转义函数。

但是,如果您阅读它的手册页,您会发现它们确实列出了转义的字符:

mysql_real_escape_string() 调用 MySQL 的库函数 mysql_real_escape_string,该函数在以下字符前面添加反斜杠:\x00、\n、\r、\、'、" 和 \x1a。

您不想使用,addslashes()因为它只会转义几个字符,并且不会提供安全的解决方案。但是您应该能够通过使用给定的字符列表重新实现转义mysql_real_escape_string(),只需简单调用strtr()或类似:

$replacements = array("\x00"=>'\x00',
                      "\n"=>'\n',
                      "\r"=>'\r',
                      "\\"=>'\\\\',
                      "'"=>"\'",
                      '"'=>'\"',
                      "\x1a"=>'\x1a');
$escaped = strtr($unescaped,$replacements);
Run Code Online (Sandbox Code Playgroud)