如果未找到任何记录,则返回默认值

时间:2017-01-27 14:09:53

标签: php mysql mysqli

我有这个PHP代码,它选择一个简单的值:

$name = $mysqli->query('SELECT name FROM users WHERE id = ' . $id . ' LIMIT 1')->fetch_object()->name;

现在,如果结果为0,则会抛出错误。

我希望返回一个默认值,例如"没有名字"如果没有结果。

有什么建议吗?

3 个答案:

答案 0 :(得分:6)

不要直接获取名称,而是先查看是否有数据。这样的事情应该有效:

$result = $mysqli->query('SELECT name FROM users WHERE id = ' . $id . ' LIMIT 1')->fetch_object();

$name = (!$result) ? 'No name' : $result->name;

另外,正如@RiggsFolly提到的那样,建议使用预准备语句来减少SQL的可能性:

$stmt = $mysqli->prepare("SELECT name FROM users WHERE id = ? LIMIT 1");
$stmt->bind_param('i',$id);
$stmt->execute();
$result = $stmt->get_result()->fetch_object();

答案 1 :(得分:3)

这可以在纯SQL中完成,这样您就不需要任何额外的PHP代码行了:

$name = $mysqli->query('SELECT IFNULL((SELECT name FROM users WHERE id = ' . $id . ' LIMIT 1), "No Name") name')->fetch_object()->name;

答案 2 :(得分:1)

尝试使用预备声明:

$result = $mysqli->prepare('SELECT name FROM users WHERE id = ? LIMIT 1');
$result->bind_param("i", $id);
$result->execute();
$result->bind_result($col1);
$result->fetch();
$name = (!$col1) ? 'No name' : $col1;
echo $name;
$result->close();