我找到this on php.net来检查文件是否存在。
我想首先检查记录是否存在,然后进行更新,否则进行插入。
if(record exist) {
update query}
else
{ insert query}
我知道如何更新或插入,但不知道如何检查记录是否存在。怎么做?
答案 0 :(得分:25)
如果您知道如何执行SQL SELECT
,那么请执行以下操作:
$result = mysql_query("SELECT * FROM table1 WHERE something");
$num_rows = mysql_num_rows($result);
if ($num_rows > 0) {
// do something
}
else {
// do something else
}
更好的是,不要在PHP中执行此操作,请使用INSERT ... ON DUPLICATE KEY UPDATE
。
答案 1 :(得分:5)
您不需要在PHP中执行此操作,您可以直接在数据库的SQL查询中执行此操作(我假设您正在使用数据库记录,因为这就是您的问题所听起来的样子,我会假设MySQL,因为它经常与PHP一起使用。)
INSERT INTO ... ON DUPLICATE KEY UPDATE;
这将插入一个新行(如果它尚不存在),或者更新当前的行,假设您的表具有主键。
有关详细信息,请参阅MySQL Manual。
另一个选择是先执行SELECT COUNT(1) FROM myTable WHERE ...
查询,然后只在结果为0时执行插入,否则执行更新。
答案 2 :(得分:4)
您也可以尝试this
INSERT ... ON DUPLICATE KEY UPDATE
答案 3 :(得分:3)
我会推荐Dominic Rodger的解决方案,但稍加改动就可以让它变得更快。 您应该选择一个值而不是一行。
$result = mysql_query("SELECT key FROM table1 WHERE something LIMIT 1"); $num_rows = mysql_num_rows($result); if ($num_rows > 0) { // do something } else { // do something else }
如果您的记录已经存在,您将得到一个结果,结果超过0,因此它可以正常工作,但可能会减少来自SQL-Server的流量。
答案 4 :(得分:1)
计算符合条件的记录吗?
select count(*) from foo where id = 5
if($count > 0) {
// record exists
...
}
答案 5 :(得分:1)
$username = $_POST["user"];
$query = mysql_query("SELECT * FROM users WHERE username='$username'");
if(mysql_num_rows($query) != 0)
{
echo "Username already exists";
}
else
{
//proceed with code here
}
答案 6 :(得分:0)
您可以对该记录执行选择并检查结果,或者您可以尝试更新并查看是否存在错误。如果有,那么没有什么可以更新,所以插入。
答案 7 :(得分:0)
您可以将数据库中的特定列设置为主键,然后只有在您没有记录时插入才会成功。 这样,您就不需要检查记录是否存在。
答案 8 :(得分:0)
奇怪没有人提到过使用REPLACE?
答案 9 :(得分:0)
我遇到了同样的问题,我解决了使用REPLACE INTO,一个以这种方式工作的MySQL扩展:
当我不需要记住记录的旧值时,我发现这种方法很有用。 例如,如果你想增加一个值,这个方法不是一个很好的方法,因为它也会删除旧记录和旧值。
请记住,您还需要具有INSERT和DELETE权限才能使用REPLACE。
以下是基于我的代码的示例:
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "REPLACE INTO table_name (name, age, current_date)
VALUES ('" . $name . "', $age, '" . date('Y-m-d') . "')";
if ($conn->query($sql) === FALSE) {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();