繁体   English   中英

检查记录是否存在

[英]Check if Record Exists

在php.net上发现了这个以检查文件是否存在。

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

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

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

如果您知道如何执行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

您不需要在PHP中执行此操作,您可以直接在数据库的SQL查询中执行此操作(我假设您正在使用数据库进行记录,因为这就是您的问题所听到的内容,而我我会假设MySQL,因为它经常与PHP一起使用)。

INSERT INTO ... ON DUPLICATE KEY UPDATE;

如果新行尚不存在,则会插入新行,如果存在,则会更新当前行,假设您的表具有主键。

有关详细信息,请参阅MySQL手册

另一种选择是首先执行SELECT COUNT(1) FROM myTable WHERE ...查询,然后仅在结果为0时执行插入,否则执行更新。

你也可以试试这个

INSERT ... ON DUPLICATE KEY UPDATE

我会推荐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的流量。

$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
}

计算符合条件的记录?

select count(*) from foo where id = 5

if($count > 0) {
    // record exists
    ...
}

奇怪没有人提到过使用REPLACE?

我遇到了同样的问题,我解决了使用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();

您可以对该记录执行选择并检查结果,或者您可以尝试更新并查看是否存在错误。 如果有,那么没有更新,所以插入。

您可以将数据库中的特定列设置为主键,然后只有在您没有记录时插入才会成功。 这样,您不需要检查记录是否存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM