我正在寻找一种方法来安全地将字符串插入数据库?

时间:2011-10-15 10:07:25

标签: php mysql string

4 个答案:

答案 0 :(得分:6)

两个建议:

  1. 抛弃mysql_XXX API。它会在某些时候被废弃,它缺乏关键功能,最明显的是参数化查询。如果您不知道参数化查询是什么,请阅读。它们是保持SQL连接代码健全的唯一理智方式。对于PHP,我建议使用PDO - 这有点不那么简单,但它非常值得学习曲线。
  2. 确保您的字符集/编码正确无误。这些天最简单的事情是使用Unicode(utf-8)来处理所有事情。您需要在数据库本身中设置编码(如果可以;在MySQL中,您需要按表和每列执行此操作,如果必须改装它可能会非常麻烦),连接编码(只需调用SET NAMES UTF-8建立连接后的第一件事),php的内部编码(mb_internal_encoding)和输出编码(mb_http_output)。另外,确保您实际输出的是UTF-8;这意味着所有源文件和模板也应该以utf-8编码保存。
  3. 无论你做什么:永远不会使价值观或替代价值。像这样的代码:mysql_query("SELECT * FROM users WHERE USERNAME = '$username'");应该是非法的 - 有太多的方法可以用脚shoot射击自己并引入SQL注入漏洞。 (如果你不知道SQL注入是什么,那么也要阅读它。)

    最后;关于如何调试情况的一些提示。

    • 设置MySQL查询日志记录。 my.ini中有一个设置会导致MySQL服务器将所有传入的查询转储到日志文件中。您不希望在生产服务器上执行此操作,并且您只想暂时启用它,但它是一个很好的工具,可以查看实际发送到服务器的内容。
    • 使用命令行客户端登录MySQL,如果您手动触发相同的查询,请查看它输出的内容。
    • 调试你的PHP - 确保你发送到服务器的值是你认为的那样 - 如果你手头没有调试器,用print语句编写脚本总比没有好(只记得在提交之前将其删除)

答案 1 :(得分:2)

此(additionally)看起来已启用magic_quotes_gpcDocs。这是一种不安全的服务器设置,它会破坏您的数据。

另见:

答案 2 :(得分:0)

使用prepared statements而不是转义,看看是否有帮助。另请检查code pages/ characters集是否正确。

答案 3 :(得分:-2)

实际上非常简单..

例如假设我想在我的表中插入一个字符串“Welcome”然后我必须写这样的查询:

插入mytablename)个值('welcome')

如果你动态插入你的记录意味着用PHP或任何语言写,那就像这样写

$ string =“welcome”; mysql_query(“插入mytable name值('”。$ string。“')”);

出于安全目的,还可以启用魔术引号...请访问以获取更多信息

http://www.php.net/manual/en/function.get-magic-quotes-gpc.php