这是参考此处发布的帖子: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));
答案 0 :(得分:1)
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 improved或mysql pdo - php data objects