【问题标题】:php mysqli binding issue with IN clauseIN子句的php mysqli绑定问题
【发布时间】: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(),因此您不是对所有逗号分隔值进行查询,而是查询单个逗号分隔值字符串.这些值不会从字符串中分解出来,您可能不会得到任何结果。

标签: php mysqli


【解决方案1】:
SELECT id FROM users WHERE referrer IN ('val1, val2, ...');

但它并不完全正确......你必须这样做

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多