【问题标题】:Prepping comma delimited string for mysql's WHERE IN为 mysql 的 WHERE IN 准备逗号分隔的字符串
【发布时间】:2011-04-06 02:06:55
【问题描述】:

我有以下字符串...

1,2,3,4,5,6

我想要这样的

'1','2','3','4','5','6'

在MySQL的WHERE IN()中使用

有人知道最好的方法吗?

谢谢!

【问题讨论】:

  • 没有必要将值封装在单引号中。 MySQL 将根据列数据类型将 INTegers 隐式转换为 VARCHAR,反之亦然。如果数据类型是 INT,则根本不应该用单引号引起来...
  • 但是这个参数也反过来起作用,比如“如果你将参数作为字符串传递,你不必对脚本中的类型做出假设;MySQL 将隐式转换类型是适用的”

标签: php mysql arrays string


【解决方案1】:

使用explodeimplode

 $str = "1,2,3,4,5,6";
 echo "'" . implode("','", explode(',', $str)) . "'";

 //output: '1','2','3','4','5','6'

【讨论】:

  • 如果您不使用参数化查询:如果您将项目作为字符串文字传递,您应该这样对待它们。您要么知道输入字符串仅包含数字,在这种情况下 OMG Ponies 的批评适用,要么您不知道字符串包含什么,您必须使用适当的转义函数处理每个项目。
  • @VolkerK,我同意。在这里,我刚刚为将其他 MySQL 实现留给用户的问题提供了严格的解决方案。
【解决方案2】:

您可以将explode 字符串放入一个数组,然后将join(或implode,这是一个别名!)加上引号:

$str = '1,2,3,4,5,6';
$arr = explode(",", $str); // turns your string into array(1, 2, 3, 4, 5, 6);
$joined_arr = join("', '", $arr); // becomes 1', '2', '3', '4', '5', '6
$query = "... WHERE ... IN ('$joined_arr')"; // note the two missing quotes have been added in

【讨论】:

    【解决方案3】:
    WHERE (SUBSTRING(SUBSTRING_INDEX(cocodes,cash_out_code,-1),1,1)=','OR...
    

    它实际上是字符串函数的组合.. 朝那个方向尝试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      • 2013-06-04
      • 2011-05-13
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多