-2

我知道你可以做到这一点

$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!';

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

$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

4 回答 4

2

您想要三元-without-the-middle-part,自 PHP 5.3 起可用。

于 2013-04-02T18:32:24.557 回答
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';
}
于 2013-04-02T18:36:39.007 回答
0

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

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

于 2013-04-02T18:32:56.677 回答
0

使用or运算符,而不是||. 它具有较低的绑定偏好。例如

$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(查询/数据库失败),要么返回结果集。在您实际检索一行数据并检查它之前,您无法知道结果集是什么。例如,仅仅因为查询调用返回了一个非假值,并不意味着查询实际上成功了。不返回数据的查询仍然是有效的查询。

例如,考虑一个登录系统,并且您正在检查一个帐户是否存在:

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

该查询完全有效,但由于用户名不存在,因此将返回一个空结果集。这是一个非错误的结果,所以or Nope不会触发。现在代码认为用户名存在,并且噗……你走上不正确的代码路径。

于 2013-04-02T18:33:19.763 回答