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

med*_*edk 0 php mysql mysqli

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

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

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

如果没有结果,我想要返回一个默认值,如"No name".

有什么建议?

Peo*_*eon 6

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

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

$name = (!$result) ? 'No name' : $result->name;
Run Code Online (Sandbox Code Playgroud)

另外,正如@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();
Run Code Online (Sandbox Code Playgroud)

  • [SQL注入攻击](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)看看[小鲍比表]发生了什么(http:/ /bobby-tables.com/)即使[如果你正在逃避输入,它也不安全!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape- string)使用[准备好的参数化语句](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) (2认同)