Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 如何在mysqli prepare语句中动态使用_Php_Mysqli_Prepared Statement - Fatal编程技术网

Php 如何在mysqli prepare语句中动态使用

Php 如何在mysqli prepare语句中动态使用,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我试着在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);

我试着在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值将被视为单个整体字符串

在子句中,
是占位符有些无用的地方,因为您已经动态地构建了一个字符串,其中占位符的数量与您的值相同,例如

$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]);
}

然后

在mysqli上找到一个更方便的包装器,它提供例如
Perl样式的数组占位符。