【问题标题】:Insert PHP Array Into Two Columns将 PHP 数组插入两列
【发布时间】:2012-02-15 06:54:16
【问题描述】:

我知道可以拆分要插入到多个列/行的数组,但我只是难住了。

假设我们有这样的东西...... 大批 ( [约翰] => 蓝色 [李] => 红色 [西尔瓦] => 绿色 [保罗] => 黑色
)

在我的表中,我有三列,即 id、name、color。我怎样才能插入这些元素,以便我的表中的行增加(基于这个数组,它应该是总共 4 行).. 谢谢。

【问题讨论】:

  • 到目前为止您尝试了什么(显示更多代码)?你想做什么?什么是“表”?数据库表还是html表?
  • 你是什么表?数据库表还是html表?

标签: php arrays


【解决方案1】:

如果您的意思是要将数组插入到数据库表中,那么:

foreach($yourArr as $name => $color) { //your insert query here $name = mysql_real_escape_string($name); $color = mysql_real_escape_string($color); $sql = "INSERT INTO TABLE_NAME VALUES ('$name', '$color')"; $query = mysql_query($sql); }

你的意思是这样的吗..

【讨论】:

  • +1 是使用正确字符串格式的唯一答案。
【解决方案2】:
$counter=1;  
foreach ($yourarray as $key=>$item){  
  ?> <tr>  
    <td> <? echo $counter; ?></td>  
    <td> <? echo $key; ?></td>  
    <td> <? echo $item; ?></td>

    </tr><?  
    $counter++;
}

如果你的意思是 html 表格。

【讨论】:

  • 嗨,Ivil,感谢您抽出宝贵时间...实际上它是我的 MySQL 数据库中的一个表,用于存储学生的分数(以颜色表示)。因此,基于该数组,表应该有 4 条记录(4 种 id、4 种名称、4 种颜色)——在表中递增存储......简单地说,最后我们应该有 4 行/记录。
【解决方案3】:

如果您的 id 有 auto_increment 这是我使用的解决方案:

$data = Array ( 'john' => 'blue', 'lee' => 'red', 'sylva' => 'green', 'paul' => 'black');
$items = array();
foreach($data as $key => $val) $items[]="('$key', '$val')";
$sql = "insert into table (`name`,`color`) values".implode(',',$items);
echo $sql;

【讨论】:

  • 这是有道理的..但是我遇到了一个 MySQL 问题,它说列计数与第 1 行的值计数不匹配...它反映了我用来插入记录的两列.. :( 有什么想法吗?
  • foreach($data as $key => $val) $items[] = "('$key' , '$val')";
  • 在您输入查询的每个字符串中,您必须转义一些特殊字符。
【解决方案4】:
$query = '';
foreach($array as $key=>$value){
   $query .= "insert into table(name,color) values('".$key."','".$value."')";
}
echo $query;

由于数组中没有条目,您的插入查询将被构建,您可以触发数据库以更新表(假设自动递增 id)

【讨论】:

    【解决方案5】:

    更好/最优的解决方案!

    <?php
    
    $data = Array ( 'john' => 'blue', 'lee' => 'red', 'sylva' => 'green', 'paul' => 'black');
    
    $sqlPart='';
    foreach($data as $key => $val)
        $key = mysql_real_escape_string($key);
        $val = mysql_real_escape_string($val);
        $sqlPart .= "('$key' , '$val'), ";
    $sqlPart = rtrim($sqlPart , ', ').';';
    $sql = 'INSERT INTO `table`(`name`,`color`) VALUES '.$sqlPart;
    echo $sql;
    
    ?>
    

    输出:

    插入table (name,color) 值

    ('约翰' , '蓝色'), ('李','红色'), ('西尔瓦','绿色'), ('保罗' , '黑色');

    【讨论】:

    • 这个“最佳”解决方案缺少必要的 SQL 格式。这次为您添加了它,但您将来必须更准确。还从您的斜线-n-撇号热潮中做出了可读的声明。
    • ' 工作得更快,而且 mysql_real_escape_string 不仅需要其他功能,还可以在 sql 或脚本注入方面与它一起使用。基本想法是使用数组,我做得很好!
    • 哦,拜托,请不要在没有线索的人之后重复“工作更快”的废话。还请注意 mysql_real_escape_string 与注射无关。这是一个字符串格式化函数,它是这里唯一的要求,你不需要别的。没有人在这里谈论注射——你可能把这个功能弄错了。基本思想是给出一个可以毫无危险地使用的正确答案,不是吗?
    • 可能你对 "" 很满意,但我不是,mysql_real_escape_string 与它无关
    • mysql_real_escape_string 确实与 PHP 引号无关。它用于转义 SQL 字符串中的特殊字符。
    猜你喜欢
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2011-04-24
    • 2011-11-10
    • 2011-04-27
    • 1970-01-01
    相关资源
    最近更新 更多