如何在 mysqli prepare 语句中动态使用 IN
How to use IN dynamically with mysqli prepare statement
我试图将 IN 与 mysqli prepare 语句一起使用
$user_in = "'28','22'";
$stmt = $this->connection->prepare("SELECT `id` FROM `$this->table_name` WHERE `user_id` IN (?) ");
if($stmt){
$stmt->bind_param('s',$user_in);
if($stmt->execute()){
$result = $stmt->get_result();
if($result !== false && $result->num_rows >= 1){
$row = $result->fetch_all(MYSQLI_ASSOC);
$stmt->close();
var_dump($row);
}
}
}
echo $this->connection->error;
return false;
但是上面的方法无法获取任何结果集
占位符代表单个值。如果您有一个使用变量和占位符的查询:
$var = '1,2,3';
SELECT ... WHERE foo IN (?)
那么查询将按照 SQL 字面上的
执行
SELECT ... WHERE foo IN ('1,2,3')
并且您的 3 个单独的 csv 值将被视为单个整体字符串。
IN
子句是占位符有些无用的地方,因为您已经动态构建了一个字符串,其中的占位符与您的值一样多,例如
$vals = array(1,2,3);
$placeholders = '?' . str_repeat(',?', count($vals) - 1);
$stmt = $db->prepare("SELECT ... WHERE foo IN ($placeholders)");
foreach($vals as $i => $val) {
$stmt->bind($i, $vals[$i]);
}
然后
我试图将 IN 与 mysqli prepare 语句一起使用
$user_in = "'28','22'";
$stmt = $this->connection->prepare("SELECT `id` FROM `$this->table_name` WHERE `user_id` IN (?) ");
if($stmt){
$stmt->bind_param('s',$user_in);
if($stmt->execute()){
$result = $stmt->get_result();
if($result !== false && $result->num_rows >= 1){
$row = $result->fetch_all(MYSQLI_ASSOC);
$stmt->close();
var_dump($row);
}
}
}
echo $this->connection->error;
return false;
但是上面的方法无法获取任何结果集
占位符代表单个值。如果您有一个使用变量和占位符的查询:
$var = '1,2,3';
SELECT ... WHERE foo IN (?)
那么查询将按照 SQL 字面上的
执行SELECT ... WHERE foo IN ('1,2,3')
并且您的 3 个单独的 csv 值将被视为单个整体字符串。
IN
子句是占位符有些无用的地方,因为您已经动态构建了一个字符串,其中的占位符与您的值一样多,例如
$vals = array(1,2,3);
$placeholders = '?' . str_repeat(',?', count($vals) - 1);
$stmt = $db->prepare("SELECT ... WHERE foo IN ($placeholders)");
foreach($vals as $i => $val) {
$stmt->bind($i, $vals[$i]);
}
然后