Php 一种全局化mysql函数以避免sql注入的方法

Php 一种全局化mysql函数以避免sql注入的方法,php,mysql,sql,sql-injection,Php,Mysql,Sql,Sql Injection,请记住我还在学习。我在一个网站上工作,我只是从现有的代码中调整和复制大部分代码,因为这是我理解它们最简单的方法 我不断收到一个由于使用撇号而导致的sql错误,我开始为每个文本字段输入mysql\u real\u escape\u string(),从而解决了各个问题 现在这真的只是我在寻求帮助。请不要讽刺,我只是想学习,这里是提问的最佳场所,因此: 有没有办法修复一个常规设置,过滤掉干扰的撇号?基本上,有什么东西可以帮助站点防止sql注入?任何帮助都将不胜感激:)使用数据访问层为您做到这一点比手

请记住我还在学习。我在一个网站上工作,我只是从现有的代码中调整和复制大部分代码,因为这是我理解它们最简单的方法

我不断收到一个由于使用撇号而导致的sql错误,我开始为每个文本字段输入
mysql\u real\u escape\u string()
,从而解决了各个问题

现在这真的只是我在寻求帮助。请不要讽刺,我只是想学习,这里是提问的最佳场所,因此:


有没有办法修复一个常规设置,过滤掉干扰的撇号?基本上,有什么东西可以帮助站点防止sql注入?任何帮助都将不胜感激:)

使用数据访问层为您做到这一点比手动保护每个查询参数要好得多。这不仅是因为它很乏味,而且因为有一个关键参数你最终会忘记


我还是做PHP的时候用过——它非常轻巧,不引人注目。。。但是,如果您是初学者,插入它可能仍然是一项艰巨的任务。

一般解决方案:所有参数(值)都应该通过预先准备好的语句占位符传递

有没有办法修复一个常规设置,过滤掉干扰的撇号

绝对不是。 很久以前就有一个,但现在它被诽谤、弃用并被逐出教会(因为它从来没有像预期的那样起作用,也没有达到它的目的)

您面临的问题来自SQL查询是一个程序这一事实。 因此,您必须遵循创建此程序的语法规则,就像使用任何其他程序语言一样。如果你碰巧创建了一个PHP程序,你也必须注意那些令人恼火的撇号——你不能把它放在任意的地方,但每个代码都必须有严格的语法含义,或者——如果撇号是数据的一部分——必须正确地转义

所以,这只是语法问题。
解决此问题的最佳方法是将代码与数据分开。
本机编写的语句为您提供了这种可能性。
您可以创建一个程序—查询本身—并最终将一些变量绑定到该程序,以便将程序代码和日期分别发送到SQL server。
这就是为什么prepared语句被认为是创建动态SQL查询的最佳方法

但当然,您必须显式地将每个变量绑定到它的查询-因此,没有通用的方法

但是,您可以使用一些助手自动进行绑定,因此,代码变得尽可能简洁

$db->run("SELECT * FROM table WHERE id=?",$id); 

写得简短,同时又非常安全。

有什么理由喜欢它而不是pdo/mysqli?ps:它不再受支持,最后一个版本是在2007年发布的-很可能不是P我已经有一段时间没有积极使用PHP并跟踪生态系统了。请放弃
mysql\uuz
函数(我希望开发团队会反对它们),使用一个支持参数化查询的内置库,例如PDO。我希望开发团队会反对它们。你是说mysql\u查询和mysql\u获取\u对象等等吗?因为我不知道还有什么其他的方法…完全正确。PDO实际上比mysql函数更容易使用(使用参数时转义是自动的)。有人在用它。