【发布时间】:2022-06-15 16:37:23
【问题描述】:
我需要将一组值绑定到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