Php 使用集合操作时准备好的语句

Php 使用集合操作时准备好的语句,php,mysqli,Php,Mysqli,我有一个简单的查询,在PHP脚本中执行起来并不容易: SELECT `title` from `MY_TABLE` WHERE id in (30,32,33,44) 通常我用准备好的语句执行sql查询。我放置了一堆?,然后绑定参数。这次括号中的数字是我从用户那里得到的数据数组 我试过这个,但不起作用: $ids = [30,32,33,44]; $stmt = $mysqli->prepare(" SELECT `title` from `MY_TABLE` WHERE id in

我有一个简单的查询,在PHP脚本中执行起来并不容易:

SELECT `title` from `MY_TABLE` WHERE id in (30,32,33,44)
通常我用准备好的语句执行sql查询。我放置了一堆
,然后绑定参数。这次括号中的数字是我从用户那里得到的数据数组

我试过这个,但不起作用:

$ids = [30,32,33,44];
$stmt = $mysqli->prepare("

SELECT `title` from `MY_TABLE` WHERE id in (?)

");
// $stmt->bind_param();
$stmt->bind_param("i",$ids);
$stmt->execute();
$stmt->bind_result($title);
$stmt->store_result();
//fetch
如何使用准备好的语句执行集合操作

更新:

听了你的建议后,我想出了这个主意

$ids = [30,32,33,44];
$questionMarks  = rtrim(str_repeat('?,',count($ids)),", ");
$parameters = str_repeat('i',count($ids));
echo $questionMarks."<br>";
echo $parameters."<br>";
$stmt = $mysqli->prepare("

SELECT `title` from `MY_TABLE` WHERE id in (".$questionMarks.")

");

$scene_names = [];
$stmt->bind_param($parameters, $ids); //error here
$stmt->execute();
$stmt->bind_result($title);
$stmt->store_result();
我不知道为什么它认为元素的数量(在这种情况下,元素是什么?)是错误的

更新2:

而不是:

$stmt->bind_param($parameters, $ids); //error here
我用过:

$stmt->bind_param($parameters, ...$ids); //error gone
塔拉姆。工作正常。

类似于:

$ids = [30,32,33,44];
$types = array();
foreach($ids as $i){
    array_push($types,'i');
}
$params = array_merge($ids,$types);
$sqlIN  = str_repeat('?,',count($ids));
$sqlIN  = rtrim($sqlIN, ',');

//Value of $sqlIN now looks like ?,?,?,?

$sql = "SELECT title from MY_TABLE WHERE id IN ($sqlIN)";
$stmt = $mysqli->prepare($sql);
call_user_func_array(array($stmt, 'bind_param'), $params);
$stmt->execute();
$stmt->bind_result($id);
$stmt->store_result();
比如:

$ids = [30,32,33,44];
$types = array();
foreach($ids as $i){
    array_push($types,'i');
}
$params = array_merge($ids,$types);
$sqlIN  = str_repeat('?,',count($ids));
$sqlIN  = rtrim($sqlIN, ',');

//Value of $sqlIN now looks like ?,?,?,?

$sql = "SELECT title from MY_TABLE WHERE id IN ($sqlIN)";
$stmt = $mysqli->prepare($sql);
call_user_func_array(array($stmt, 'bind_param'), $params);
$stmt->execute();
$stmt->bind_result($id);
$stmt->store_result();

您需要与阵列中的元素数量相同的
。您需要与阵列中的元素数量相同的
。我们快到了。不幸的是,还有一个错误。请参阅更新的问题。抱歉,我已经习惯了PDO,在PDO中,您可以只传递一个元素数组,我将检查mysqli文档,然后返回给您,以指导我。。。我强烈推荐使用PDO,它非常类似,但功能更好。对于mysqliThanks,可能有一个更干净的解决方案。没有用,但那篇文章实际上包含了正确的答案。它涉及到使用splat operatorGlad来知道您已将其排序!我和我的Qlithanks在新的水域。我们快到了。不幸的是,还有一个错误。请参阅更新的问题。抱歉,我已经习惯了PDO,在PDO中,您可以只传递一个元素数组,我将检查mysqli文档,然后返回给您,以指导我。。。我强烈推荐使用PDO,它非常类似,但功能更好。对于mysqliThanks,可能有一个更干净的解决方案。没有用,但那篇文章实际上包含了正确的答案。它涉及到使用splat operatorGlad来知道您已将其排序!我和mysqli有了新的交情