2 回答
TA贡献1805条经验 获得超9个赞
如果您无法向表中添加唯一键,您可以先尝试更新,如果没有更新任何行,请执行插入操作。像这样的东西:
$stmt = $conn->prepare('UPDATE `Table1` SET `code_stat` = 2 WHERE code = :code');
$stmt->execute(array(':code' => $_POST['code']));
if (!$stmt->rowCount()) {
// no rows updated, so insert
$stmt = $conn->prepare('INSERT INTO `Table1` (`code_stat`, `code`) VALUES (2, :code)');
$stmt->execute(array(':code' => $_POST['code']));
}
请注意,您可能需要设置该PDO::MYSQL_ATTR_FOUND_ROWS属性以确保UPDATE查询在找到行但值未更改时返回 1。您必须在建立连接时设置该属性,例如
$conn = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
TA贡献1809条经验 获得超8个赞
为什么不写一个存储过程来处理这个,类似于下面的:
DROP PROCEDURE IF EXISTS db.SP_NEW_CODE;
CREATE PROCEDURE db.`SP_NEW_CODE`(IN `in_code` INT)
BEGIN
DECLARE numFound INT DEFAULT 0;
SET numFound=(SELECT * FROM `Table1` WHERE `code`= in_code);
IF (numFound=0) THEN
INSERT INTO `Table1` (`code`,`code_stat`) VALUES (in_code, 2 );
ELSE
UPDATE `Table1` SET `code_stat` = 2 WHERE code = in_code
END IF;
END;
从您的代码中,简单地执行 CALL SP_NEWCODE(3); (例如,其中 3 是适当的代码值)。
- 2 回答
- 0 关注
- 249 浏览
添加回答
举报