为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查表是否为空或者我的查询是否与任何结果都不匹配

如何检查表是否为空或者我的查询是否与任何结果都不匹配

PHP
largeQ 2023-09-08 14:09:55
我想要一个仅在表中没有行或现有行与我的输入中的特定参数不匹配时运行的 if 语句。我尝试了这样的方法:$currentURL = $post["media_url"];$sql = "SELECT * FROM images WHERE imageURL = '$currentURL'";$result = $conn->query($sql);if(!$result){ ... }根据我的想法,这应该在我第一次想向数据库添加内容并且 $currentURL 在现有数据中不存在时执行 if 语句。但这似乎并不像我想象的那样有效。你会怎么做?也许我处理 $result 是错误的,因为如果我在 phpmyadmin 中测试 sql 查询,这会显示正确的结果(没有行)。
查看完整描述

3 回答

?
MM们

TA贡献1886条经验 获得超2个赞

正确的方法是使用准备好的语句并将结果提取到数组中。您可以使用以下命令将所有行提取到数组中fetch_all()


$stmt = $conn->prepare("SELECT * FROM images WHERE imageURL = ?");

$stmt->bind_param('s', $post["media_url"]);

$stmt->execute();

// Get result and then fetch all rows from the result object

$result = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);


// Then check if you have any rows at all using a simple if statement

// Negate it using ! to check if the array is empty

if (!$result) {

    // no results found

}


查看完整回答
反对 回复 2023-09-08
?
当年话下

TA贡献1890条经验 获得超9个赞

我猜,那$conn是一个 PDO 连接?在这种情况下,该方法$conn->query()返回 PDOStatement 类型的对象。请参阅https://www.php.net/manual/de/class.pdostatement.php


该方法不返回结果集。


相反,您可以使用 PDOStatement 对象来获取结果:


$currentURL = $post["media_url"];

$sql = "SELECT * FROM images WHERE imageURL = '$currentURL'";

$result = $conn->query($sql)->fetchAll();


if(empty($result))

{ ... }

如果您使用 mysqli,返回的对象query()是这样的: https: //www.php.net/manual/en/class.mysqli-result.php


所以代码是:


$currentURL = $post["media_url"];

$sql = "SELECT * FROM images WHERE imageURL = '$currentURL'";

$result = $conn->query($sql)->fetch_all(MYSQLI_ASSOC);


if(empty($result))

{ ... }

另请注意:您的代码非常不安全!您应该使用准备好的语句来防止 sql 注入:


$currentURL = $post["media_url"];

$sql = "SELECT * FROM images WHERE imageURL = :currentUrl";

$stmt = $conn->prepare($sql);

$stmt->execute(['currentUrl' => $currentURL]);

$result = $stmt->fetchAll();


if(empty($result))

{ ... }


查看完整回答
反对 回复 2023-09-08
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

  1. 清理输入以防止 SQL 注入(或更好 - 使用准备好的语句和参数绑定)

$sql = "SELECT * FROM images WHERE imageURL = '".$conn->real_escape_string($currentURL)."'";

  1. mysqli 查询成功时返回 true(即使空数据集也成功),请使用 num_rows 代替:

if ( $result->num_rows === 0 ) { ... }


查看完整回答
反对 回复 2023-09-08
  • 3 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信