【问题标题】:PHP how to quote string array valuesPHP如何引用字符串数组值
【发布时间】:2014-02-27 01:24:21
【问题描述】:

如果我有以下数组 $array[0] = array( "1" => bar, "2" => foo, "3" => 13546 ); 并且我 implode() 它,则返回的值将是:bar,foo,13546 不能在 mysql 查询中使用...我怎样才能将单引号放在那些字符串值...

我尝试了几种方法(比如foreach($array as $key=>$value) 用 is_numeric() 检查 $value,检查没问题,但我不知道如何将值更改为 '$value'...)

对此有什么建议吗?

编辑

我为感兴趣的人找到了另一种方法:

$result[0] = array(
    "1" => bar,
    "2" => foo,
    "3" => 1232.13
);

$copy_r = $result[0];

foreach($copy_r as $key=>$value)
{
    if(!is_numeric($value))
    {
        $insert_array[] = "`$key` = '$value'";
    }
    else
    {
        $insert_array[] = "`$key` = $value";
    }
}

$final_string = implode(',', $insert_array);
$insert_q = "INSERT INTO `table_name` SET $final_string
             ON DUPLICATE KEY UPDATE ($final_string)";

【问题讨论】:

标签: php mysql arrays string


【解决方案1】:

同意您应该查看准备好的陈述,但是要回答您的原始问题,您可以这样做:

$array=array('a', 'b', 'c');

$string = "'" . implode("','", $array) . "'";

【讨论】:

  • 他只想用'包围字符串值,数值应该保持空白。
【解决方案2】:

更好地使用准备好的查询。但只是为了好玩:

implode(',', array_map(function($value) {
    if(!is_numeric($value)) {
        return '"' . $value . '"';
        //adds double quotes, but if you prefer single quotes, use:
        //return "'" . $value . "'";
    } else {
        return $value;
    }
}, $array[0]);

【讨论】:

    【解决方案3】:

    foreach+isnumeric() 可能是最好的方法。然后更改值:

    $array[$key] = "'" . $value . "'";
    

    foo/"foo" 变成'foo'/"'foo'" 等等。

    【讨论】:

      【解决方案4】:

      如果你使用mysql驱动:

      function escape( $x ) {
       return "'" . mysql_real_escape_string($x) . "'";
      }
      
      $data = array( "1" => bar, "2" => foo, "3" => 13546 );
      
      echo implode( ',', array_map('escape', $data) );
      

      【讨论】:

        【解决方案5】:

        经过验证的解决方案对我不起作用。一定是我做错了,但下面的解决方案对我有用,我在我的 MYSQL IN 子句中使用了结果,因为所有值都需要在该查询中采用引号形式。

        解决方案很简单,它使用引用调用来修改原始数组值和PHP的数组过滤器来遍历所有值。

        function quote(&$a){
              $a='"'.$a.'"';
            }
        
            $arr= array('car','bus','truck','bike');
        
            array_filter( $arr,'quote');
        
            echo implode(',', $arr);
        

        【讨论】:

        • 你应该使用准备好的语句,因为这只会让 SQL 注入漏洞保持开放。此外,这引用了所有内容,这不是 OP 所要求的。最后,使用array_filter 改变数组是不好的做法。
        • 问题: 1. 我只是在这里创建一个字符串并将其存储在我可以在我的 php 代码中使用的变量中,如 IN ($arr),那么这将如何使系统容易受到攻击?跨度>
        • 我应该为此使用 array_map() 吗?
        • 这里就不解释SQL注入了。举个例子:当$arr 包含') or 1=1 or 'x' in (' 这样的值时,SQL 语句将不会产生预期的效果。 (2)你应该使用array_map而不是在函数中改变数组,而是return修改后的值,并使用array_map的返回值。
        猜你喜欢
        • 2020-12-04
        • 1970-01-01
        • 2017-04-15
        • 1970-01-01
        • 2016-06-22
        • 1970-01-01
        • 2013-07-04
        • 1970-01-01
        • 2014-11-25
        相关资源
        最近更新 更多