代码重写:通过php数组将多行插入mysql

时间:2015-05-08 16:35:02

标签: php mysql

这是参考此处发布的帖子:insert multiple rows via a php array into mysql

我的问题是,有谁可以更详细地解释这一点?我不明白$data$row是什么或做什么。

我从像$Customer = $_POST['Customer'];这样的形式中提取了许多变量所以,如果有人能够展示如何将这个代码与多个变量一起使用的示例,那将是非常好的。

$sql = array(); 
foreach( $data as $row ) 
{
    $sql[] = '("'.mysql_real_escape_string($row['text']).'", '.$row['category_id'].')';
}
mysql_query('INSERT INTO table (text, category) VALUES '.implode(',', $sql));

1 个答案:

答案 0 :(得分:1)

来自:PHP: foreach - manual

  

foreach构造提供了一种迭代数组的简单方法。 foreach仅适用于数组和对象,并且当您尝试在具有不同数据类型或未初始化变量的变量上使用它时会发出错误。

在此代码中,$data是一个数组。在每次迭代时,foreach会将当前行的值分配给$row。这相当于:

for($i=0;$i<sizeof($data);$i++)
{
    $row = $data[$i];
    //use $row however u want
}

例如:

$data[0]['text'] = 'text for category1';
$data[0]['category_id'] = '1';

$data[1]['text'] = 'text for category2';
$data[1]['category_id'] = '2';

$data[2]['text'] = 'text for category3';
$data[2]['category_id'] = '3';

使用此$data变量运行foreach后,如果您使用var_dump($row),则会得到如下内容:

array(3) {
  [0] =>
  string(25) "("text for category1", 1)"
  [1] =>
  string(25) "("text for category2", 2)"
  [2] =>
  string(25) "("text for category3", 3)"
}

最后一行将implode此数组创建一个有效的mysql查询。

PS:顺便说一下,不推荐使用mysql扩展。您应该了解mysqli - mysql improvedmysql pdo - php data objects