Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在bind_参数中使用s表示int_Php_Mysqli_Prepared Statement_Bindparam - Fatal编程技术网

Php 在bind_参数中使用s表示int

Php 在bind_参数中使用s表示int,php,mysqli,prepared-statement,bindparam,Php,Mysqli,Prepared Statement,Bindparam,让我们来看一下mysqli查询: $query = "SELECT * FROM table WHERE (".$id_type."=?)"; $id\u type是硬编码的,可以是“userID”(mysql表中的int(11))或“sessionID”(mysql表中的char(36)) 我可以这样绑定参数吗 $stmt->bind_param('s', $id); >在 BINDPARAM< 中使用“ S/时,是否存在性能损失或其他事项,即使 $ID可能是 int ?如果不是,

让我们来看一下mysqli查询:

$query = "SELECT * FROM table WHERE (".$id_type."=?)";
$id\u type
是硬编码的,可以是
“userID”
(mysql表中的
int(11)
)或
“sessionID”
(mysql表中的
char(36)

我可以这样绑定参数吗

$stmt->bind_param('s', $id);

<> >在<代码> BINDPARAM< <代码>中使用“<代码> S/<代码>时,是否存在性能损失或其他事项,即使<代码> $ID<代码>可能是<代码> int <代码>?如果不是,为什么我以后还要麻烦使用正确的字母(
I
s
d
,…)?

尽可能准确地减少副作用/问题的风险总是好的

在你的情况下,这应该很容易做到

例1 如果你只有两个选择的话,那就行了

如果您有更多,下面的方法将起作用

例2 然后,如果需要更多COL,可以继续添加到
$types
数组。

是的,可以

边缘情况很少见,很可能永远不需要使用特定类型

另一个答案中提供的技巧在这种特殊情况下有效。但对于整个应用程序来说,当您要实现某种自动化时,设置特定类型将是一件痛苦的事情

关于堆栈溢出有数百万个问题,这些奇怪的情况是你永远想象不到的。当您使用
s
时,它们中没有一个是关于用例的,这导致了任何问题

在旧的mysql_查询代码中,您一直在使用
“$id”
,没有任何问题

PDO一直在对
s
使用这种方法。也没有报告


因此,如果您愿意,您可以执行一些技巧,但实际上它们是不必要的。

或者您可以这样做:
$type=$id\u type=='userID'?'i’:‘s’。然后只需执行以下操作:
$stmt->bind_param($type,$id)。重要的是,该值将作为不同的类型发送到MySQL。大多数情况下,MySQL都会将自己的类型转换为与上下文相关的类型,所以通常这并不重要。但并非总是如此。@deceze感谢这些见解。这个案子怎么样?在这种情况下,这有关系吗?相关:你能解释一下你所说的“关于堆栈溢出有数百万个问题,关于你永远想象不到的奇怪的情况”是什么意思吗?你是说我在你的示例顺序中描述的一个示例是公平的,我没有想到它
$type = $id_type == 'userID' ? 'i' : 's';
$stmt->bind_param($type, $id);
$types = [
    'userID'    => 'i',
    'sessionID' => 's',
];

$stmt->bind_param($types[$id_type], $id);