php - 将数据导出为 .sql 格式。如何逃脱?

标签 php mysql sql sqlite escaping

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

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

大多数 mysqli->* 和 PDO 相关的函数都依赖于一个开放的连接(以确定诸如字符集之类的东西)。解决这个问题的好方法是什么?

最佳答案

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

但是,如果您阅读 the manual page for it ,你会看到他们确实列出了转义的字符:

mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.

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

$replacements = array("\x00"=>'\x00',
                      "\n"=>'\n',
                      "\r"=>'\r',
                      "\\"=>'\\\\',
                      "'"=>"\'",
                      '"'=>'\"',
                      "\x1a"=>'\x1a');
$escaped = strtr($unescaped,$replacements);

关于php - 将数据导出为 .sql 格式。如何逃脱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5696355/

相关文章:

Mysql - 将查询结果用于另一个查询

mysql - 使用 Zipkin TracingStatementInterceptor 启动 c3po 连接池时发生死锁

iphone - 如何使用 UISegmentedControl 更改 tableview 中的数据源

php - 使用后退按钮时重定向 Codeigniter 用户

php - 邮件()与PHP

php - 无法更改 WordPress tinymce 编辑器字体

php - 列出数据库中没有数据的月份

mysql - 在JSP中创建MySQL表

sql - 如何根据其他行计算总和

c# - 如何使 linq to entities 或 dbcontext 在插入语句中使用输出?