我将 PHP 与 adodb 一起使用,但遇到了一个大问题。我正在使用 adodb 来加速开发,所以我可以这样做:
$r["Name"] = $_POST['txtName'];
if ($_POST["ID"] != "")
$conn->AutoExecute("content", $r, 'UPDATE', 'AutoID = ' . $_POST["ID"]);
else
$conn->AutoExecute("content", $r, 'INSERT');
但是,如果该名称中有单引号,它会用斜杠保存到数据库中!因此,如果名称是 Testimonial's,它将另存为 Testimonial\'s,这给我带来了很多问题,无论如何我可以避免这种情况,但仍然像上面那样编程,因为它比准备插入/更新语句快得多。
干杯
最佳答案
这个问题的正确和最终解决方案由两部分组成:
- 在您的代码中以编程方式禁用所有
magic_quotes
。这确保您有一个已知的配置可以使用,如果/当管理员更改这些 php.ini 设置时,该配置不会被破坏。 - 在访问数据库之前验证/引用所有传入的用户输入!
虽然第一部分是良好的编程,但第二部分对于编写安全的应用程序绝对必不可少!
要引用用户输入,您可以采用两种方式:
- 手动(使用 AdoDB 的
qstr
或Quote
),在这种情况下,您必须非常非常小心,不要遗漏任何内容。这对于小型项目来说非常可行,我过去曾多次这样做。 - 使用带有绑定(bind)变量的准备好的语句来进行查询。只要您正确指定变量类型,这将确保您的应用程序中永远不会有 SQL 注入(inject),并且比第一个选项更不容易出错。这就是我一段时间以来一直在做的事情。
更新:
如果您使用准备好的语句,您可能会发现 AdoDB 不会给您带来太多好处,您可以使用 PDO 完成大部分工作。当您需要“自动化”的东西时,您可以自己编写一些特定于该应用程序的函数。根据我的经验,与包含 AdoDB 相比,这只需要多做一些工作,但整体上要好一些。
关于php mysql adodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4267015/