【问题标题】:Add quotation marks to comma delimited string in PHP在 PHP 中为逗号分隔的字符串添加引号
【发布时间】:2012-09-28 03:57:58
【问题描述】:

我有一个表单,它是一个选择多个输入的表单,它会像这样发布值:option1,option2,option3 等。

如何将其转换为'option1','option2','option3' 等的最佳方法...

目前我正在这样做,但感觉不对劲??

$variable=explode(",", $variable);
$variable=implode("','", $variable);

我这样做的原因是因为我想在使用 IN 的 SQL 查询中使用表单选择多个输入。

SELECT * FROM TABLE WHERE some_column IN ('$variable')

【问题讨论】:

  • 如何将第一个和最后一个 ' 放在一起?还是你把它放在一些你不显示的代码中?
  • 我编辑了在变量中添加引号的 SQL 语句。
  • 不要像这样构建查询字符串。使用PDO
  • meagar,为什么不呢?为什么 PDO 更好?
  • 你可能会更好地使用FIND_IN_SET(),然后转义。

标签: php string comma delimited quotation-marks


【解决方案1】:

您可以将任何代码包装在一个函数中,以消除“感觉不对”的感觉。例如:

function buildSqlInClauseFromCsv($csv)
{
        return "in ('" . str_replace(",", "','", $csv) . "') ";
}

【讨论】:

  • 我所说的“感觉不对”的意思是可能会有一种苦涩的方式:) 你认为这个功能会做得更快吗?
【解决方案2】:

如果 $variable = "option1,option2,option3"

你可以使用:

"SELECT * FROM TABLE WHERE FIND_IN_SET(some_column, '$variable')"

【讨论】:

  • 如何使用NOT IN SET?
  • Kiran Reddy:从表中选择 * 未找到 FIND_IN_SET(some_column, '$variable')
【解决方案3】:

我们知道 implode 将数组转换为字符串,我们需要提供分隔符,然后数组如下所示,这里我们有 (coma ,) 作为分隔符。 Implode 使用给定的分隔符打破数组的每个元素,我自负 '(单引号)与分隔符。

 $arr = array();
    $arr[] = "raam"; 
    $arr[] = "laxman"; 
    $arr[] = "Bharat"; 
    $arr[] = "Arjun"; 
    $arr[] = "Dhavel"; 
    var_dump($arr);


    $str = "'".implode("','", $arr)."'";
    echo $str;

输出: 'raam','laxman','Bharat','Arjun','Dhavel'

【讨论】:

  • 虽然这可能会回答问题,但在您的答案中加入一些文字来解释您在做什么总是一个好主意。阅读how to write a good answer
  • 感谢您的建议。
【解决方案4】:

这是我使用的:

WHERE  column IN ('".str_replace(",", "','", $_GET[stringlist])."')

【讨论】:

  • 太棒了。为什么内爆爆炸,如果你能在一行中做到这一点。
【解决方案5】:

对于 SQL 转义字符串只有一种正确的方法 - 使用数据库 api 提供的函数为 SQL 转义字符串。而mysyl_* 提供mysql_real_escape_string()

$choices = explode(",", $variable);

foreach($choices as &$choice)
    $choice = "'".mysql_real_escape_string($choice)."'";

$choices = implode(",", $choices);

PDO提供了一种会同时加引号的方法:

$choices = explode(",", $variable);

foreach($choices as &$choice)
    $choice = $pdoDb->quote($choice);

$choices = implode(",", $choices);

注意这里是 PDO::prepare doesn't really work

【讨论】:

  • 这是一种很好的做法,但不幸的是,它不能回答所提出的问题。
  • @Hammerite:不推荐 - 这个问题暗示提问者已经在使用它。
  • @Asad:我的印象是它为你添加了引号。编辑为使用 PDO 版本,确实如此。
猜你喜欢
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 2014-01-24
  • 2017-01-05
  • 2017-09-13
  • 2016-02-08
  • 2022-01-03
相关资源
最近更新 更多