3

我正在尝试编写一个查询以使用'implode'以有效的方式插入一个包含许多值(比如1000)的数组。这是代码。

$sql = array(); 
foreach( $return as $key=>$row ) {
$sql[] = '("'.mysql_real_escape_string($row['fullname']).'",   '.$row['age'].','.$row['since'].','.'"'.mysql_real_escape_string($row['description']).'")';
}
mysql_query('INSERT INTO data (name, age, since, description) VALUES '.implode(',', $sql));

我的查询将记录数组插入到data表中。我想更改查询,以便在记录存在时更新记录,否则将插入记录。

4

1 回答 1

11

您可能想要的是“ON DUPLICATE KEY”的一个版本,它实际上允许您引用正在输入的数据。

INSERT INTO data (name, age, since, description) VALUES
     ("Bob", 23, "01-01-1980", "friend"),
     ("Bill", 33, "03-01-1980", "tall"),
     ("Jane", 43, "12-01-1980", "thin")
 ON DUPLICATE KEY UPDATE age=VALUES(age),
                         since=VALUES(since),
                         description=VALUES(description);

希望您阅读时不言自明?


$sql = array();   
foreach( $return as $key=>$row ) {  
    $sql[] = '("'.mysql_real_escape_string($row['fullname']).'",   '.$row['age'].','.$row['since'].','.'"'.mysql_real_escape_string($row['description']).'")';  
}  
mysql_query('INSERT INTO data (name, age, since, description) VALUES '.implode(',', $sql). ' ON DUPLICATE KEY UPDATE age=VALUES(age), since=VALUES(since), description=VALUES(description);');  

编辑,将其添加到上面的用户代码中。

于 2012-08-27T06:29:52.100 回答