php – 如何将参数绑定到未准备的查询?

前端之家收集整理的这篇文章主要介绍了php – 如何将参数绑定到未准备的查询?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在制作一个小型的Web应用程序,它将定期接收用户输入的数据.在研究如何确保数据输入首先被清理时,为此它似乎是准备好的语句是要走的路.

我发现this SO question然而,因为我的应用程序(至少据我所知)每页请求不会执行多个查询,看起来我真正需要的是将值绑定到查询中的参数.@H_403_2@

我一直在浏览PDO和MysqLi上的PHP手册,但我找不到任何值与普通查询绑定的示例.我发现的所有示例都有一个$stmt->在绑定之前的某处准备.@H_403_2@

是否该语句是“准备”的东西是由数据库支持决定的,而准备语句将始终在代码中?或者有没有办法将参数直接绑定到$dbh->查询(…)?@H_403_2@

为了解释为什么我要查看它是否可能不使用prepare,是由于我之前在帖子中链接的SO问题的声明:@H_403_2@

When not to use prepared statements? When you’re only going to be running the statement once before the db connection goes away.@H_403_2@

When not to use bound query parameters (which is really what most people use prepared statements to get)?@H_403_2@

还有这个@H_403_2@

Personally I wouldn’t bother. The pseudo-prepared statements are likely to be useful for the safe variable quoting they presumably provide.@H_403_2@

How do you bind parameters to a query that isn’t prepared?@H_403_2@

你没有.在那些问号可被视为参数值的插入点之前,需要首先解析(即准备好)具有参数(即特定位置的问号)的sql字符串.@H_403_2@

因此,在调用bind()之前,总是需要调用prepare().@H_403_2@

参数化语句是一个包含sql和占位符标记的字符串(例如问号,但不同的数据库使用不同的占位符):@H_403_2@

$sql = "SELECT user_id FROM user WHERE user_name = ?"

现在假设您要在此位置插入一个值:@H_403_2@

$_POST["username"]

从广义上讲,准备一份陈述会给问题带来特殊的意义,“这里可以插入一个价值”.换句话说,它从占位符创建参数.@H_403_2@

$stmt->prepare($sql)

将值绑定到参数会将参数设置为特定值.@H_403_2@

$stmt->bind_param("s",$_POST["username"])

现在可以在没有sql字符串的情况下执行查询,并且用户提供的值实际上彼此接触.这是重要的一点:sql和参数值分别发送到服务器.他们从不相互接触.@H_403_2@

$stmt->execute();

优点是:@H_403_2@

>您可以将新值绑定到参数并再次执行查询,而无需重复所有操作(在循环中很有用).>无论$_POST [“username”]包含什么值,sql注入都是不可能的.@H_403_2@

原文链接:https://www.f2er.com/php/137447.html

猜你在找的PHP相关文章