【问题标题】:convert Nested array into mysql query将嵌套数组转换为 mysql 查询
【发布时间】:2013-02-01 10:17:00
【问题描述】:

我需要用这个数组生成一个mysql插入查询,其中列名是field_name,值是field_values。我尝试使用 implode,这里是它的嵌套数组,让我很困扰。

 Array
    (
        [0] => Array
            (
                [field_name] => Date
                [field_value] => 01/02/2013
            )

        [1] => Array
            (
                [field_name] => Time
                [field_value] => 03:20 PM
            )

        [2] => Array
            (
                [field_name] => submitted_lat
                [field_value] => 13.06114
            )

        [3] => Array
            (
                [field_name] => submitted_long
                [field_value] => 80.2371547
            )

        [4] => Array
            (
                [field_name] => submitted_on
                [field_value] => 2013-02-01 15:20:10
            )

        [5] => Array
            (
                [field_name] => submitted_by
                [field_value] => superadmin@gmail.com
            )

        [6] => Array
            (
                [field_name] => pdf
                [field_value] =>
            )

    )

【问题讨论】:

  • 你的桌子叫什么名字?
  • @SankalpMishra 这重要吗?
  • @Ravi 不,我只是遇到了一些事情
  • 希望您得到的答案应该将其转换为准备好的语句而不是基本的 MySQL 语句
  • @MarkBaker :这就是我在回答中建议做的事情,但我只熟悉 MySQLi,它需要列的类型才能正确绑定数组不提供的值。跨度>

标签: php mysql arrays multidimensional-array


【解决方案1】:

试试这个

$sql = "INSERT INTO `table_name` SET ";
$sql_fields='';

foreach($array_name as $k=>$v){
    $sql_fields .= "`".$v['field_name']."`='".$v['field_value']."', ";
}

$sql_fields = substr($sql_fields,0,-2);
$sql .= $sql_fields;
echo $sql;

【讨论】:

    【解决方案2】:

    一个非常简单的方法是这样的:

    $query = 'insert into table ';
    foreach($inputs as $input) {
      $query .= ' '.$input['field_name'].' = '.$input['field_value']; 
    }
    echo $query;
    

    【讨论】:

    【解决方案3】:
    $fields=array();
    $values=array();
    for($i=0;$i<count($array);$i++)
    {
       $fields[]=$array[$i]['field_name'];
       $values[]=$array[$i]['field_value'];
    }
    
    if(count($array) > 0)
    {
       $query="Insert into tablename (".implode(",", $fields).") values (".implode(",", $values).")";
       mysql_query($query);
    }
    

    【讨论】:

      【解决方案4】:

      您需要确保您的值正确并受到保护以避免 SQL 注入。动态构建您自己的 SQL 查询并直接插入您的数据库是不安全的。

      无论如何你都可以使用array_map() 来做这样的事情:

      $arr = array(array("name" => "column1", "value" => "value1"),
                   array("name" => "column2", "value" => "value2"),
                   array("name" => "column3", "value" => "value3"));
      
      $columns = array_map(function($item) { return $item['name'];}, $arr);
      $values = array_map(function($item) { return "'". $item['value'] . "'";}, $arr);
      
      
      $columnsList = implode(',', $columns);
      $valuesList = implode(',', $values);
      
      $sql = "INSERT INTO mytable($columnsList) VALUES ($valuesList)";
      

      编辑:正如在介绍中所说,这不安全,最好使用MySQLiPDO。但您还需要知道要插入的列的类型。

      【讨论】:

        猜你喜欢
        • 2023-01-11
        • 1970-01-01
        • 2017-08-24
        • 2020-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-14
        相关资源
        最近更新 更多