【发布时间】:2013-06-18 02:01:34
【问题描述】:
我需要将一组值绑定到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)."'";。不要使用引号!!这是通过“s”选项再见bind_param完成的! -
按照其他人的建议,使用 call_user_func_array 函数将所需参数绑定到参数化查询。只是为了强调它接受通过引用传递的参数。我只能找到有关如何使用要绑定的动态参数量执行参数化查询的代码片段,所以我最终做了自己的函数(请参阅this 帖子)。它接受任何参数化的 SELECT、UPDATE、INSERT 和 DELETE 查询,它可以帮助我在 PHP 代码中动态地进行任何 MySQL 数据库交互。