如果在 SELECT 查询后 SQL 中不存在行,如何显示错误消息?

How to show an error message if row is not present in SQL after a SELECT query?

我正在尝试 运行 SELECT * FROM <table> WHERE <param> = <value> LIMIT 1 SQL 查询与 MySQLi

我构建了这个代码片段,如果输入 ID 存在于 SQL 数据库中,它就可以完美运行。

$id = $_GET['id'];

// preparing and binding
$stmt = $conn->prepare("SELECT * FROM `testtable1` WHERE `userid` = ? LIMIT 1");
$stmt->bind_param("i", $id);

// setting parameters and execute
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();

echo $row['email'] . '<br><br>';

我想知道的是,我如何知道数据库中是否存在输入 ID(与 URL 一起传递)NOT目前,如果数据库中存在 ID,则会显示 email 参数的值。但如果它不存在,则不会显示任何内容..

那么对于上面的代码,如何检查输入的 ID 是否正确 - 如果不正确我可以在那里显示 'Incorrect ID' 消息?

首先要记住的是,有效查询可以 return 空记录集。这意味着您不是在寻找错误,但可能会得到一个空结果。

一种方法是检查行数 returned

$id = $_GET['id'];

$stmt = $conn->prepare("SELECT * 
                        FROM `testtable1` 
                        WHERE `userid` = ? 
                        LIMIT 1");
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->store_result();
if ( $stmt->num_rows > 0 )
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();
    echo $row['email'] . '<br><br>';
} else {
    //no rows returned id must not exist
    echo 'That use does not exist';
}

PHP 像大多数编程语言一样,有一种称为 if 语句的语言结构。 if 语句需要一个布尔值,如果该值为真(或 true-ish),则执行以下代码块。

在 PHP 中,一个空数组被认为是 false-ish 因此您可以简单地执行以下操作来检查 SELECT 语句是否返回了任何值:

$stmt = $conn->prepare("SELECT * FROM `testtable1` WHERE `userid` = ? LIMIT 1");
$stmt->bind_param("i", $id);
// setting parameters and execute
$stmt->execute();
$result = $stmt->get_result();

$row = $result->fetch_assoc();
if($row) {
    echo $row['email'] . '<br><br>';
} else { 
    echo 'Incorrect ID - no value found in the database!';
}

如果if(condition)中的条件为false-ish,则执行else块。如果 SQL 返回一个值,那么您将在 $row 中有一个 non-empty 数组,该数组的计算结果为真,并且将执行第一个代码块。