如果$ value是真实的,则返回$ value,否则返回其他内容

时间:2013-04-02 18:29:17

标签: php

我知道你可以这个

$var = mysql_query("SELECT * FROM..") ? mysql_query("SELECT * FROM.."):'Nope!';

// the same as this

if(mysql_query("SELECT * FROM..")) $var = mysql_query("SELECT * FROM..");
else $var = 'Nope!';

但它不方便,因为如果它是一个返回数组或假的函数,并且可能更新表中的某些数据。所以我想知道是否有办法

$var = mysql_query("SELECT * FROM..") ? $returnOfFunction:'Nope!';

像这样的东西

$var = mysql_query("SELECT * FROM..") || 'Nope!';

但是在php中,这意味着如果这是真的或者这是真的,那么我是真的

我希望有人能理解我的想法。

编辑: 这会有用吗?

function pickTrue($one, $two) {
  if($one == true) return $one;
  else return $two;
}

$var = pickTrue(mysql_query("SELECT * FROM table"), 'Nope');

4 个答案:

答案 0 :(得分:2)

你想要ternary - 没有中间部分,自PHP 5.3起可用。

答案 1 :(得分:1)

  • 首先,不要使用mysql_*函数。他们被弃用了。
  • 其次,mysql_query返回您必须从中获取的资源。让一个变量包含资源或字符串是不好的做法。

这是一个更好的方法:

$q= 'SELECT a, b, c FROM mytable';
if($r= $db->query($q)){
  $success = 'yep';
  while($row = $r->fetch_assoc()) {
    //do stuff
  }
} else {
  $success = 'nope';
}

答案 2 :(得分:0)

不要写这样的代码。 mysql_query的结果并不总是可以比较的布尔值。您还将丢失在查询数据库时可以执行的任何错误消息和错误处理。

简短回答:是的。答案:不要

答案 3 :(得分:0)

使用or运算符代替||。它具有较低的绑定偏好。 e.g。

$result = mysql_query($sql) || die(mysql_error()); // always kills the script
v.s.
$result = mysql_query($sql) or die(mysql_error()); // kills the script ONLY if the query returns false

但是,请勿使用此类错综复杂的代码。减少行数是件好事,但当它使可读性受到损害时,这是一件非常糟糕的事情。

主要问题是SELECT查询返回布尔值false(查询/ db失败)或结果集。在实际检索一行数据并进行检查之前,您无法知道结果集是什么。例如仅仅因为查询调用返回了非假值,并不意味着查询实际上已经超过了。不返回任何数据的查询仍然是有效查询。

e.g。考虑登录系统,并检查帐户是否存在:

$sql = "SELECT id FROM users WHERE username=Some_username_that_doesnt_exist";
$exists = mysql_query($sql) or "Nope!";

查询完全有效,但由于用户名不存在,将返回空结果集。这是一个非假结果,因此or Nope不会触发。现在代码认为用户名存在,并且poof ... off你的代码路径不正确。