我有这样的表结构
当我向表中插入行时,我正在使用此查询:
INSERT INTO table_blah ( material_item, ... hidden ) VALUES ( data, ... data ) ON DUPLICATE KEY UPDATE id = id, material_item = data, ... hidden = data;
当我第一次插入数据而不触发ON DUPLICATE KEY
id增量罚款:
但是当ON DUPLICATE KEY
触发器和我插入新行时,id看起来很奇怪:
auto increment
即使触发,我怎样才能保持正确的增量ON DUPLICATE KEY
?
是否有任何单个 SQL语句等同于这些?
UPDATE table_name SET (a = 'something', b='B1') WHERE id=1;
UPDATE table_name SET (a = 'something else', b='B2') WHERE id=2;
UPDATE table_name SET (a = 'another', b='B3') WHERE id=3;
Run Code Online (Sandbox Code Playgroud) 在PHP中,我从URI中提取大量JSON数据,然后通过内置json_decode
函数将其序列化为关联的PHP数组.
然后,我创建一个数组:
$inserts = array();
Run Code Online (Sandbox Code Playgroud)
我遍历JSON关联数组,为我的$inserts
数组中的JSON数组中的每个项添加一个新的键/值对:
foreach($JSON_data as $key => $value) {
$inserts[] = "(".mysql_real_escape_string($value["prop1"]).","
.mysql_real_escape_string($value["prop2"]).","
.mysql_real_escape_string($value["prop3"]).")";
}
Run Code Online (Sandbox Code Playgroud)
然后,我只是通过插入我已经准备好的插入来执行批量插入:
mysql_query("INSERT INTO `MyTable` (`col1`,`col2`,`col3`) VALUES ".implode(",",$inserts));
Run Code Online (Sandbox Code Playgroud)
无论如何,我发现mysql_*
不再建议使用这个家庭.所以我想知道如何使用预先准备好的语句或者新接受的结构来完成这种类型的模式?我担心的是消除SQL注入,并且尽可能快地更新MySQL,只需少于10个并发的开放连接(最好是1).此外,尽可能简单快捷.
或者,如果有新模式或首选方法来执行此类批量事务.