【发布时间】:2012-01-26 17:01:27
【问题描述】:
$artist_user_ids = implode(',',$artist_user_ids);
$referrer = "referrer IN (?)";
$query = "SELECT id FROM users WHERE $referrer";
$con = db_connect();
$stmt = db_prepare($con, $query);
bind_param('s', $artist_user_ids);
那行不通。但是,如果我将第一行更改为:
$artist_user_ids = "'" . implode(',',$artist_user_ids) . "'";
它就像一个魅力。什么给了?
【问题讨论】:
-
@Michael 不完全是。我的问题是:为什么?
implode()返回一个字符串。为什么我需要引用一个字符串? -
因为 IN 子句需要多个参数。要绑定它们,需要将它们绑定为多个参数。不能将一串值评估为多个参数 - 这样做会破坏参数化查询提供的安全优势。
-
@Michael 我明白了。但是,为什么当我用单引号括起来时它会起作用呢?
-
因为您将其作为单个值传递给
IN(),因此您不是对所有逗号分隔值进行查询,而是查询单个逗号分隔值字符串.这些值不会从字符串中分解出来,您可能不会得到任何结果。