Php 我应该如何只在单引号中添加斜杠而忽略双引号?

Php 我应该如何只在单引号中添加斜杠而忽略双引号?,php,mysql,escaping,Php,Mysql,Escaping,我应该如何只在单引号中添加斜杠而忽略双引号? 我正在使用php。我只想避开单引号,以防止php mysql查询中断 谢谢大家! 编辑: 我认为正则表达式搜索和替换将是最有用的。使用。对于MySQL连接的字符编码,它只会转义所需的字符。如果使用查询参数进行动态值,则根本不需要进行任何转义 您可以在扩展或我更喜欢的扩展PDO中使用查询参数。旧的mysql扩展不支持查询参数。好吧,preg_replace_all/[^\]'/,$1\',$yourstrher将按照您的要求执行: /[^\]'/产生r

我应该如何只在单引号中添加斜杠而忽略双引号? 我正在使用php。我只想避开单引号,以防止php mysql查询中断

谢谢大家!

编辑:
我认为正则表达式搜索和替换将是最有用的。

使用。对于MySQL连接的字符编码,它只会转义所需的字符。

如果使用查询参数进行动态值,则根本不需要进行任何转义

您可以在扩展或我更喜欢的扩展PDO中使用查询参数。旧的mysql扩展不支持查询参数。

好吧,preg_replace_all/[^\]'/,$1\',$yourstrher将按照您的要求执行:

/[^\]'/产生regex/[^\]'/,表示匹配任何不是后跟单引号的反斜杠字符,并捕获引号之前的字符。 $1\'表示替换为捕获的字符,后跟反斜杠和单引号 但是


比尔关于使用mysqli或pdoapi的参数化查询的回答是非常非常好的建议。让您的数据库API来处理这个问题比自己来处理更容易、更有效——编写这些API的人和为这些API在本机后端工作的人可能在解决安全性和性能问题上投入了比我们大多数人希望花费的更多的时间和精力。

一个简单的stru_replace',\\',$string应该可以工作。但是正如上面Gumbo所说的,如果你试图逃避MySQL查询,你应该使用库函数。

好的,我写这篇文章真的很晚了,但是添加这个答案希望它能帮助别人回答这个问题。虽然@westonC提供了一个正则表达式解决方案,但有一个php函数可以实现这一点——addcslasheshttp://php.net/manual/en/function.addcslashes.php:

string addcslashes ( string $str , string $charlist )
Returns a string with backslashes before characters that are listed in charlist parameter.

mysql\u real\u escape\u string$变量;仍然转义双引号。MySQL将正确地在行中插入\而不是\。当您选择它时,它将显示为而不是\。在运行mysql\u real\u escape\u string$variable之后;然后将变量放入查询中;我签入了我的phpmyadmin,单引号和双引号都在条目中转义。@atwellpub:这是正确的行为,因为双引号可以用于在MySQL中声明字符串。图像您有一个类似于“SELECT*FROM table WHERE row=”.$value.”的查询。如果$value中可能的双引号没有转义,则可能会导致无效的字符串声明,或者——因为您希望防止SQL注入——一种将控制数据注入SQL查询的方法。@atwellpub:可能您启用了Magic Quote;记住杰米·扎温斯基的话:有些人在遇到问题时,认为我知道,我会使用正则表达式。现在他们有两个问题。谢谢大家的帮助。我真的很感激所有的建议和答案,他们会一直坚持下去的。这是非疑问的最好答案;至少对于正在生成类文件的我来说是这样。看到正则表达式,我正要发布str\u替换'\','\\\',$str,直到我注意到这一点。我只是使用单引号来避免调用双引号的表达式检查。