参考:使用MySQL扩展的完美代码示例是什么?
这是为了创建一个社区学习资源..我们的目标是有好的代码示例,这些代码不会重复复制/粘贴PHP代码中经常出现的可怕错误。我已经要求它成为社区维基。
这是不是作为编码比赛。它不是寻找最快或最紧凑的方式来进行查询-它是提供一个好的,可读的参考,特别是对新手。
每天都有大量的问题涌入真的很糟糕使用mysql_*
堆栈溢出的函数族。虽然通常最好将这些人引导到PDO,但有时这既不可能(例如继承的遗留软件),也不现实(用户已经在他们的项目中使用它)。
使用mysql_*
图书馆包括:
- SQL注入值
- 限制子句和动态表名中的SQL注入
- 没有错误报告(“为什么这个查询不能工作?”)
- 错误报告(也就是说,即使在代码投入生产时也会发生错误)
- 值输出中的跨站点脚本(Xss)注入
让我们编写一个PHP代码示例,它使用MySQL_*函数族:
- 接受两个员额值,
id
(数字)及name
(a字符串) - 对表执行更新查询
tablename
,更改name
列中具有ID的id
- 如果出现故障,请友好地退出,但只在生产模式中显示详细的错误。
trigger_error()
就足够了;或者使用您选择的方法。 - 输出消息“
$name
最新情况“。
而且真的不显示上面列出的任何弱点。
应该是尽可能简单..理想情况下,它不包含任何函数或类。目标不是创建副本/可压缩库,而是创建显示使数据库查询安全所需的最小操作。
好的评论加分。
这样做的目的是使这个问题成为一个资源,当用户遇到一个有错误代码的问题询问者(尽管它根本不是问题的焦点)或者遇到一个失败的查询并且不知道如何解决它时,用户可以链接到这个资源。
预先阻止PDO的讨论:
是的,它往往会更好地指导个人写这些问题的PDO。当它成为一种选择时,我们应该这样做。然而,这并不总是可能的-有时,问题问者正在处理遗留代码,或者已经有了很长的路要用这个库,而且现在不太可能改变它。此外,mysql_*
如果使用得当,功能家族是完全安全的。所以这里没有“使用PDO”的答案。