检查记录是否存在

时间:2010-05-17 12:16:28

标签: php

我找到this on php.net来检查文件是否存在。

我想首先检查记录是否存在,然后进行更新,否则进行插入。

if(record exist) {
   update query}
else 
  { insert query}

我知道如何更新或插入,但不知道如何检查记录是否存在。怎么做?

10 个答案:

答案 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扩展:

  • 如果您要插入的记录不存在,则为MySQL REPLACE会插入一条新记录。
  • 如果要插入的记录 已存在,MySQL REPLACE 首先删除旧记录,然后插入新记录

当我不需要记住记录的旧值时,我发现这种方法很有用。 例如,如果你想增加一个值,这个方法不是一个很好的方法,因为它也会删除旧记录和旧值。

请记住,您还需要具有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();