我需要将一组值绑定到 WHERE IN(?)
子句。我怎样才能做到这一点?
这有效:
$mysqli = new mysqli("localhost", "root", "root", "db");
if(!$mysqli || $mysqli->connect_errno)
{
return;
}
$query_str= "SELECT name FROM table WHERE city IN ('Nashville','Knoxville')";
$query_prepared = $mysqli->stmt_init();
if($query_prepared && $query_prepared->prepare($query_str))
{
$query_prepared->execute();
但这我无法像这样使用 bind_param :
$query_str= "SELECT name FROM table WHERE city IN (?)";
$query_prepared = $mysqli->stmt_init();
if($query_prepared && $query_prepared->prepare($query_str))
{
$cities= explode(",", $_GET['cities']);
$str_get_cities= "'".implode("','", $get_cities)."'"; // This equals 'Nashville','Knoxville'
$query_prepared->bind_param("s", $cities);
$query_prepared->execute();
我究竟做错了什么?
我也尝试过 call_user_func_array
,但似乎无法获得正确的语法。
原文由 Mark 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 PHP 8.1 开始,您可以直接传递一个数组来执行:
对于早期版本,任务有点复杂但可行。对于一个简单的情况,当您已经有一个带有占位符的查询时,代码将是
虽然像您的情况一样,我们有任意数量的占位符,但我们将不得不添加更多代码。我将从我的文章 Mysqli prepared statement with multiple values for IN clause 中获取 解释:
所以正确的示例代码是
尽管此代码相当大,但它比迄今为止本主题中提供的任何其他看似合理的解决方案都小得无法比拟。