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

我想要一个仅在表中没有行或现有行与我的输入中的特定参数不匹配时运行的 if 语句。我尝试了这样的方法:


$currentURL = $post["media_url"];

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

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


if(!$result)

{ ... }

根据我的想法,这应该在我第一次想向数据库添加内容并且 $currentURL 在现有数据中不存在时执行 if 语句。但这似乎并不像我想象的那样有效。你会怎么做?也许我处理 $result 是错误的,因为如果我在 phpmyadmin 中测试 sql 查询,这会显示正确的结果(没有行)。


largeQ
浏览 98回答 3
3回答

MM们

正确的方法是使用准备好的语句并将结果提取到数组中。您可以使用以下命令将所有行提取到数组中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 emptyif (!$result) {    // no results found}

当年话下

我猜,那$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)){ ... }

紫衣仙女

清理输入以防止 SQL 注入(或更好 - 使用准备好的语句和参数绑定)$sql = "SELECT * FROM images WHERE imageURL = '".$conn->real_escape_string($currentURL)."'";mysqli 查询成功时返回 true(即使空数据集也成功),请使用 num_rows 代替:if ( $result->num_rows === 0 ) { ... }
打开App,查看更多内容
随时随地看视频慕课网APP