我需要插入记录,但如果存在记录,则进行替换。以下是我目前正在使用的内容:
$sessionDate = date("Y-m-d H:i:s");
foreach($tmpVP as $sessionVP) {
$res = mysql_query("INSERT INTO sessions
(sessionID,sessionDate,sessionVS,sessionVP)
VALUES('$sessionID','$sessionDate','$sessionVS',
'$sessionVP')") ;
}我真正需要的是更新任何匹配sessionID、sessionVS和sessionVP的记录,并插入不匹配的新记录。
编辑:
表定义
CREATE TABLE `sessions` (
`ID` bigint(20) NOT NULL auto_increment,
`sessionID` varchar(36) NOT NULL,
`sessionDate` datetime NOT NULL,
`sessionUser` bigint(20) NOT NULL,
`sessionVS` varchar(255) NOT NULL,
`sessionVP` bigint(20) NOT NULL,
`reserved` int(11) NOT NULL,
PRIMARY KEY (`ID`),
KEY `ID` (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=88 DEFAULT CHARSET=utf8sessionID、sessionVP和sessionVS并不是唯一的。示例:
sessionID sessionDate sessionUser sessionVS sessionVP
0t1m58q9ktejuhqlrjqglcoia0 2010-06-20 09:20:53 0 111111 144268736
0t1m58q9ktejuhqlrjqglcoia0 2010-06-20 09:20:53 0 111111 144268819
0t1m58q9ktejuhqlrjqglcoia0 2010-06-20 09:20:53 0 111111 144268880因此,如果我使用0t1m58q9ktejuhqlrjqglcoia0、111111和‘144268880’的新记录,我需要更新第3行,而不是添加第4行。
发布于 2010-06-20 13:51:40
首先,您应该在(sessionID, sessionVP, sessionVS)上添加一个唯一的索引。您可以使用以下命令来完成此操作:
CREATE UNIQUE INDEX ux_sessions_sessionid_sessionvs_sessionvp
ON sessions (sessionID, sessionVS, sessionVP)然后有两种在MySQL中插入或更新的相对简单的方法。第一个是使用关于重复更新
INSERT INTO sessions
(sessionID,sessionDate,sessionVS,sessionVP)
VALUES
('$sessionID', '$sessionDate', '$sessionVS', '$sessionVP')
ON DUPLICATE KEY UPDATE sessionDate = '$sessionDate'还有一种是使用替换
REPLACE INTO sessions
(sessionID,sessionDate,sessionVS,sessionVP)
VALUES
('$sessionID', '$sessionDate', '$sessionVS', '$sessionVP')第二种方法略显简洁,但其缺点是在内部导致删除,然后插入。
还有其他几个问题:
ID上的主键索引和普通索引。删除普通索引,因为它是多余的。mysql_real_escape_string或intval来保护自己。或者,您可以查看如何使用查询参数。trigger_error,这样如果查询有错误,您就可以看到错误是什么。查看错误消息可以节省大量的调试时间。
Mysql_query(“.”)或trigger_error(mysql_error());发布于 2010-06-20 13:51:49
您可以看看INSERT ... ON DUPLICATE KEY UPDATE:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
发布于 2010-06-20 13:51:26
在(sessionID, sessionVS, sessionVP)上添加一个惟一的键,然后使用REPLACE而不是INSERT (只需替换单词,语法相同)。
https://stackoverflow.com/questions/3079447
复制相似问题