3 回答
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
}
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))
{ ... }
TA贡献1839条经验 获得超15个赞
清理输入以防止 SQL 注入(或更好 - 使用准备好的语句和参数绑定)
$sql = "SELECT * FROM images WHERE imageURL = '".$conn->real_escape_string($currentURL)."'";
mysqli 查询成功时返回 true(即使空数据集也成功),请使用 num_rows 代替:
if ( $result->num_rows === 0 ) { ... }
- 3 回答
- 0 关注
- 97 浏览
添加回答
举报