我遇到了这段代码的问题:
<?php
$new_value = 'testing';
$con = mysql_connect("localhost","user","pass");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("INSERT INTO myDB (myField) VALUES ('$new_value')");
mysql_close($con);
?>
发生了2个问题:
1st - 正在插入2条记录而不是1条
第二次 - $ new_value没有改变,当我只想要1时,它正在创建具有相同$ new_value值的多个实例。
答案 0 :(得分:3)
在阅读你的评论之后,我认为这与你所追求的相似:
INSERT IGNORE INTO tablename (fields)
VALUES(values);
使用INSERT IGNORE而不是INSERT。如果记录没有复制现有记录,MySQL会像往常一样插入它。如果记录是重复的,则IGNORE关键字告诉MySQL以静默方式丢弃它而不会产生错误。
修改强> 或者正如维陶塔斯指出的那样;如果你想替换值,请使用REPLACE而不是INSERT
答案 1 :(得分:1)
为什么不尝试使用交易?它可以帮助您避免一些插入/更新错误:
try
{
// Start TRANSACTION
mysqli_autocommit($con, false);
mysqli_query('INSERT INTO table SET field = "'.$fieldValue.'"');
// If there is no error then COMMIT
mysqli_commit($con);
}
catch(Exception $e)
{
// If there is an error, then rollback any INSERTS or UPDATES in the TRY block
mysqli_rollback($con);
$theError = $e->getMessage();
}
强烈建议您在使用数据库时在代码中使用Try / Catch块。
答案 2 :(得分:0)
2nd - $ new_value没有改变,它正在创建多个实例 当我只想要1时,使用相同的$ new_value值。
$ new_value在哪里变了?它是如何改变的?您确定没有多次按下浏览器刷新按钮吗?