【发布时间】:2020-01-30 11:06:47
【问题描述】:
让我们来看看这个 mysqli 查询:
$query = "SELECT * FROM table WHERE (".$id_type."=?)";
$id_type 是硬编码的,可以是"userID"(mysql 表中的int(11))或"sessionID"(mysql 表中的char(36))。
我可以像这样绑定参数吗?
$stmt->bind_param('s', $id);
在bind_param 中使用s 时是否有性能损失或其他我应该考虑的因素,即使$id 可能是int?如果没有,我为什么还要在将来使用正确的字母(i、s、d、...)?
【问题讨论】:
-
或者你可以这样做:
$type = $id_type == 'userID' ? 'i' : 's';。那你只需要:$stmt->bind_param($type, $id);. -
重要的是该值将作为不同的类型发送到 MySQL。大多数情况下,MySQL 将自己的类型转换为适合上下文的类型,所以通常这并不重要。但经常并不总是。
-
@deceze 感谢您提供这些见解。这个案子怎么办?在这种情况下重要吗?
标签: php mysqli prepared-statement bindparam