参考:使用MySQL扩展的完美代码示例是什么?[已关闭]
2022-08-30 09:37:30
这是为了创建一个社区学习资源。目标是拥有好代码的示例,这些示例不会重复在复制/粘贴PHP代码中经常发现的可怕错误。我已要求将其设为社区维基。
这并不意味着编码比赛。这不是关于找到最快或最紧凑的方法来进行查询 - 而是为新手提供一个好的,可读的参考。
每天,都有大量问题涌入,使用Stack Overflow上的函数系列,代码片段非常糟糕。虽然通常最好将这些人引向PDO,但有时既不可能(例如继承的遗留软件),也不现实的期望(用户已经在他们的项目中使用它)。mysql_*
使用库的代码的常见问题包括:mysql_*
- 值中的 SQL 注入
- LIMIT 子句和动态表名称中的 SQL 注入
- 无错误报告(“为什么此查询不起作用?”)
- 损坏的错误报告(即,即使代码投入生产,错误也始终会发生)
- 值输出中的跨站点脚本 (XSS) 注入
让我们编写一个 PHP 代码示例,该示例使用 mySQL_* 系列函数执行以下操作:
- 接受两个 POST 值(数字)和(字符串)
id
name
- 对表执行 UPDATE 查询,更改行中 ID 的列
tablename
name
id
- 失败时,请优雅地退出,但仅在生产模式下显示详细的错误。 就足够了;或者使用您选择的方法
trigger_error()
- 输出消息“已更新”。
$name
并且没有显示上面列出的任何弱点。
它应该尽可能简单。理想情况下,它不包含任何函数或类。目标不是创建可复制/粘贴库,而是显示使数据库查询安全所需的最少操作。
好评论的奖励积分。
目标是使此问题成为用户在遇到代码错误的问题提问者(即使它根本不是问题的重点)或遇到失败的查询并且不知道如何修复它时可以链接到的资源。
抢占 PDO 讨论的先机:
是的,通常最好将编写这些问题的个人引导到PDO。当这是一种选择时,我们应该这样做。然而,这并不总是可能的 - 有时,问题提问者正在处理遗留代码,或者已经在这个库上走了很长一段路,现在不太可能改变它。此外,如果使用得当,该系列功能是完全安全的。所以这里没有“使用PDO”的答案。mysql_*