【发布时间】:2022-11-22 15:24:38
【问题描述】:
我需要将一组值绑定到 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,但似乎无法获得正确的语法。
【问题讨论】:
-
$str_get_cities= "'".implode("','", $get_cities)."'";。不要使用引号!这是由bind_param使用“s”选项完成的! -
正如其他人推荐的那样,使用call_user_func_array将所需参数绑定到参数化查询的函数。只是为了强调它接受通过引用传递的参数。我只能找到关于如何使用动态数量的参数执行参数化查询来绑定的代码片段,所以我最终做了我自己的函数(参见 this 帖子)。它接受任何参数化的 SELECT、UPDATE、INSERT 和 DELETE 查询,它帮助我在我的 PHP 代码中动态地进行任何 MySQL DB 交互。
-
早些时候,清楚,完整的问题问完全相同的事情:Use an array in a mysqli prepared statement:
WHERE .. IN(..)query