gpt4 book ai didi

php - 检查记录是否存在的最简洁方法

转载 作者:行者123 更新时间:2023-11-29 01:52:41 24 4
gpt4 key购买 nike

我正在使用以下代码来检查我的数据库中是否存在一行:

$sql = "SELECT COUNT(1) FROM myTable WHERE user_id = :id_var";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':id_var', $id_var);
$stmt->execute();

if ($stmt->fetch()[0]>0)
{
//... many lines of code
}

所有代码都能正常工作,我怀疑以前的代码是否干净高效,或者是否有改进的余地。

目前有两个问题困扰着我之前的代码:

  1. 我的 SQL 语句末尾应该有一个 LIMIT 1 吗? COUNT(1) 是否已经将找到的行数限制为 1,或者服务器是否在找到第一个记录后继续搜索更多记录?
  2. if ($stmt->fetch()[0]>0)。这是从 SQL 查询中获取信息并执行“if 条件”的最干净的方法吗?

当然,如果有人发现任何其他可以改进我的代码的地方,我会很乐意收到您的反馈。

最佳答案

问:我的 SQL 语句末尾应该有 LIMIT 1 吗? COUNT(1) 是否已经将找到的行数限制为 1,或者服务器是否在找到第一条记录后继续搜索更多记录?

如果执行成功,您的 SELECT COUNT() FROM 查询将返回一行,因为没有 GROUP BY 子句。无需添加 LIMIT 1 子句,不会有任何影响。

数据库将搜索所有 满足WHERE 子句条件的行。如果 user_id 列是 UNIQUE,并且有一个以该列为前导列的索引,或者如果该列是表的 PRIMARY KEY ... 那么使用索引搜索所有匹配的行将是高效的。如果没有索引,则 MySQL 将需要搜索表中的所有行。

指数让你有好的表现。您可以以不同的方式编写查询,以获得可用的结果。但是你所拥有的很好。

问:这是最干净的吗...

  if ($stmt->fetch()[0]>0)

我个人的偏好是避免这种结构,并将其分解为两个或多个语句。正常模式...单独的语句来获取行,然后进行测试。

就个人而言,我倾向于避免使用 COUNT() 并只获取一行,然后测试是否有要获取的行...

  $sql = "SELECT 1 AS `row_exists` FROM myTable WHERE user_id = :id_var";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':id_var', $id_var);
$stmt->execute();
if($stmt->fetch()) {
// row found
} else {
// row not found
}
$stmt->closeCursor();

关于php - 检查记录是否存在的最简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37094377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com