我知道你可以这个
$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');
答案 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你的代码路径不正确。