【发布时间】:2021-01-31 03:24:21
【问题描述】:
使用 PHP,我想生成自定义 MySQL 转储文件(由于无法使用 exec 和其他一些原因)。
我找到了这两个类似的解决方案:
- https://www.kvcodes.com/2017/10/php-create-mysql-backup
- https://davidwalsh.name/backup-mysql-database-php
我要强调的不同部分是:
链接 1:
$row[$j] = preg_replace("#\n#", "\\n", $row[$j])
链接 2:
$row[$j] = ereg_replace("\n","\\n",$row[$j])
我知道 ereg_replace() 已被弃用。我还假设解决方案 Link 1 中有错字,应该是:
$row[$j] = preg_replace("\n", "\\n", $row[$j])
但是在我的解决方案中,我只是使用:
$row[$j] = str_replace("\n", "\\n", $row[$j])
使用str_replace()? 我怎么会出错?我已经测试了转储几个复杂数据(json、编码、html 语法),一切似乎都很好。 str_replace() 的处理方式是否与 preg_replace() 不同?
【问题讨论】:
-
链接1中没有错别字。看你需要分隔符的手册。
\v可能是正则表达式中任何换行符的最佳选择。 -
我在大部分项目中都使用了 str_replace()。 (完全没问题)
-
ereg_replace()在 PHP7 中被删除。如果您仍在使用具有它的 PHP 版本,您应该做的第一件事是将其升级到 PHP8 -
@user3783243,不是拼写错误意味着他想删除所有评论?但不应该是
"#*.#"吗? -
不,这是用转义的换行符替换所有换行符。
#s 是分隔符,不是正则表达式的一部分。 php.net/manual/en/regexp.reference.delimiters.php
标签: php mysql escaping mysql-real-escape-string