php – 我应该何时使用预准备语句?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 我应该何时使用预准备语句?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
最初我使用 mysql_connect和 mysql_query来做事情.然后我学会了sql注入,所以我试图学习如何使用预处理语句.我理解PDO类的准备和执行函数如何有助于sql注入.

但是,只有在用户输入存储到数据库中时才需要准备语句.还是可以继续使用MysqL_num_rows,因为我真的没有冒这个功能被黑客入侵的风险吗?或者使用预准备语句来执行此操作更安全吗?我应该使用预准备语句来处理涉及使用MysqL的所有内容吗?为什么?

我非常感谢任何答案和反馈.谢谢.

TL / DR

总是. 100%的时间,使用它.总是;即使你不需要使用它.使用它仍然.

不推荐使用MysqL_ *函数. (Notice the big red box?)

您最好使用@L_301_3@或MySQLi.使用预准备语句时,这两个中的任何一个都可以作为兼容库.

信任用户输入而没有预先准备好的声明/消毒它就像把车停在一个不好的邻居,解锁和点火钥匙.你基本上是在说,只是来吧,带走我的好东西

永远不应该,我的意思是永远不要相信用户输入.除非你想要这个:

参考数据并存储它,如评论中所述,您永远也不应该信任任何与用户相关的输入.除非您确保用于操作所述数据库/值的数据被硬编码到您的应用程序中,否则您必须使用预准备语句.

现在说明为什么你应该使用预备语句.这很简单.要防止sql注入,但要以最直接的方式实现.准备好的语句的工作方式很简单,它将查询和数据一起发送,但是分开(如果有意义的话哈哈) – 我的意思是:

PRepared statements
Query: SELECT foo From bar WHERE foo = ?
Data:  [? = 'a value here']

与其前身相比,您使用数据截断查询,将其作为整体发送 – 反过来,这意味着它作为单个事务执行 – 导致sql注入漏洞.

这是一个PHP PDO示例,向您展示预准备语句/绑定的简单性.

$dbh = PDO(....); // dsn in there mmm yeahh
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name,value) VALUES (:name,:value)");
$stmt->bindParam(':name',$name);
$stmt->bindParam(':value',$value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

Taken from PHP Manual for PDO Prepared Statements

更多阅读

> How can I prevent SQL-injection in php?
> What is SQL-injection? (Simple Terms)

脚本宝典总结

以上是脚本宝典为你收集整理的php – 我应该何时使用预准备语句?全部内容,希望文章能够帮你解决php – 我应该何时使用预准备语句?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。