在SQL查询中,哪些字符必须从PHP表单中删除/转义?

在SQL查询中,哪些字符必须从PHP表单中删除/转义?,php,sql,security,sql-injection,Php,Sql,Security,Sql Injection,我天真地认为,将UTF-8字符串存储到db中没有问题,即使它们包含奇怪的字符。相反,我到处读到一些字符,比如换行符,可以用来破解代码 你知道哪些角色更适合脱衣还是逃避?我还对优秀的文章和/或书籍感兴趣(最好是epub)。\x00、\n、\r、\、”和\x1a 您可以在转义字符串手册中找到这一点(例如,mysql\u real\u escape\u string()) 基本上,它是单引号,“%”和“u”(使用之类的子句进行搜索的通配符).在SQL字符串文本中,通常只需转义分隔字符串文本的字符,因为

我天真地认为,将UTF-8字符串存储到db中没有问题,即使它们包含奇怪的字符。相反,我到处读到一些字符,比如换行符,可以用来破解代码

你知道哪些角色更适合脱衣还是逃避?我还对优秀的文章和/或书籍感兴趣(最好是epub)。

\x00、\n、\r、\、”和\x1a

您可以在转义字符串手册中找到这一点(例如,
mysql\u real\u escape\u string()


基本上,它是单引号,“%”和“u”(使用
之类的
子句进行搜索的通配符).

在SQL字符串文本中,通常只需转义分隔字符串文本的字符,因为它们是离开字符串文本上下文所必需的。这意味着,在单引号字符串中,必须转义单引号字符,而在双引号字符串中,必须转义双引号字符。Addit通常,转义字符也必须转义

通常,字符串转义函数会转义这些字符以及其他不可打印的字符(如果适用)


但只要使用DMBS API提供的转义函数,您就不必关心正确的转义。

啊,我认为您在将数据保存到数据库时没有正确地进行提示?请尝试使用mysqli::real\u escape\u string()或
mysqli::prepare()
查看这篇帖子@Danijel:谢谢,我会使用PDO,他们也会为我提供一种方法,让我的查询更加模块化,就像我想做的那样。无论如何,这会保护数据库,但是php呢?我的意思是,这些数据总有一天会被处理。对于“echo”“您可以使用htmlspecialchars,但是函数呢?一个糟糕的字符串输入会把我的代码弄乱?@YourCommonSense:为什么你更喜欢手工在查询模板中进行替换而不是使用PDO?PS:再看看我之前的评论。我不确定我是否正确回答了你的问题。PDO做的正是您所说的:它在查询模板中执行替换。但是,它可以处理非常有限的一组文字,即仅处理字符串和数字。不为任何其他查询部件提供保护。