我发现this SO question然而,因为我的应用程序(至少据我所知)每页请求不会执行多个查询,看起来我真正需要的是将值绑定到查询中的参数.
我一直在浏览PDO和MysqLi上的PHP手册,但我找不到任何值与普通查询绑定的示例.我发现的所有示例都有一个$stmt->在绑定之前的某处准备.
是否该语句是“准备”的东西是由数据库的支持决定的,而准备语句将始终在代码中?或者有没有办法将参数直接绑定到$dbh->查询(…)?
为了解释为什么我要查看它是否可能不使用prepare,是由于我之前在帖子中链接的SO问题的声明:
When not to use prepared statements? When you’re only going to be running the statement once before the db connection goes away.
When not to use bound query parameters (which is really what most people use prepared statements to get)?
还有这个
Personally I wouldn’t bother. The pseudo-prepared statements are likely to be useful for the safe variable quoting they presumably provide.
How do you bind parameters to a query that isn’t prepared?
你没有.在那些问号可被视为参数值的插入点之前,需要首先解析(即准备好)具有参数(即特定位置的问号)的sql字符串.
因此,在调用bind()之前,总是需要调用prepare().
参数化语句是一个包含sql和占位符标记的字符串(例如问号,但不同的数据库使用不同的占位符):
$sql = "SELECT user_id FROM user WHERE user_name = ?"
现在假设您要在此位置插入一个值:
$_POST["username"]
从广义上讲,准备一份陈述会给问题带来特殊的意义,“这里可以插入一个价值”.换句话说,它从占位符创建参数.
$stmt->prepare($sql)
将值绑定到参数会将参数设置为特定值.
$stmt->bind_param("s",$_POST["username"])
现在可以在没有sql字符串的情况下执行查询,并且用户提供的值实际上彼此接触.这是重要的一点:sql和参数值分别发送到服务器.他们从不相互接触.
$stmt->execute();
优点是:
>您可以将新值绑定到参数并再次执行查询,而无需重复所有操作(在循环中很有用).>无论$_POST [“username”]包含什么值,sql注入都是不可能的.