【问题标题】:Change PHP indexed Array to Pass in MYSQL SELECT query将 PHP 索引数组更改为传入 MYSQL SELECT 查询
【发布时间】:2015-09-09 08:32:49
【问题描述】:

下面是我的数组

Array ( [0] => test [1] => jaz )

我想像这样在mysql中使用IN函数传递这个数组

$q = "select * from claimant where org IN (Array)";

但我需要将我的索引数组更改为简单的数组,例如 (1,2,3,4) 我如何更改数组并将其传递给 mysql IN 条件 提前致谢

【问题讨论】:

  • 索引是否与您数据库中的In clause 相同?
  • 你可以使用这个:$output = implode(',',array_keys($yourArray)); 它很简单,非常简单。
  • 使用 implode 您将无法转义数组中的字符。所以他会被利用来进行SQL注入。
  • @nxb babylon 这不是你想要的吗?

标签: php mysql arrays


【解决方案1】:

如果您的数组不包含引号(" 或 ')之类的值,那么您可以这样:

$array = array(1=>'test', 2=>'jaz');
$inClause = '"' . implode('","', $array) . '"';
$q = "select * from claimant where org IN ({$inClause})";

重要提示

即使这段代码 sn-p 对你有用,如果数组中的值来自用户(用户以某种形式或其他方式进行输入),那么你的 SQL 查询将容易受到 SQL 注入攻击。这意味着有人可以删除您的数据库或获取您的数据。

【讨论】:

  • 如果您使用此答案,则 $yourArray 中的值不会被转义。因此,如果有人使用引号,他们可能会破坏您的 SQL
  • 那你的答案呢?如果有人使用黑客,他们可以杀死数据库然后:)
  • 没错,但也有很多ifs :)
  • 如果数据只是静态数据呢?
  • 当他改变并指定问题时,我会很容易地改变我的答案,因为现在的ifs实在是太多了。
【解决方案2】:

首先将array 转换为string。您不能直接在字符串中使用数组。

使用此代码将数组转换为字符串:

$array = array(0 => 'test',1 =>'jaz');

$str = "";
foreach($array as $value) $str .= ",'$value'";
$str = substr($str,1);

然后您可以将您的 SQL 更改为如下所示:

$q = "select * from claimant where org IN ($str)";

应该会生成这样的 SQL 字符串:select * from claimant where org IN ('test','jaz')

【讨论】:

  • 糟糕,foreach 是一个丑陋的解决方案。内爆就是为此目的而设计的。
  • 是的,我同意 foreach 不是一个好的解决方案,但您将如何逃避这些值。这是完美的,因为现在它还使开发人员有机会在处理它们之前操纵和更改值
  • 没错,但是如果我们要尝试对任何有问题的字符串做正确的事情,我会尽快利用参数绑定:stackoverflow.com/questions/14960621/mysql-bind-param-with-in
猜你喜欢
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 2016-11-16
  • 2018-04-21
相关资源
最近更新 更多