2014-01-07 187 views
5
$conn = mysql_connect($db_host,$db_user,$db_password) || die('Connection to mysql failed'); 
mysql_close($conn); 

执行此代码时,显示以下警告。“或”与“||”之间的区别?

PHP的警告:mysql_close()预计参数1是资源,布尔在script.php的给予上线45

$conn = mysql_connect($db_host,$db_user,$db_password) or die('Connection to mysql failed'); 
mysql_close($conn); 

没有警告现在!?

+1

'var_dump($ conn);' – zerkms

+1

不要使用mysql函数-.- – jeremy

+2

@Jeremy这不是一个非常有用的评论。我怀疑他是否在使用'mysql'库,他可能只是不知道有什么理由不这样做。至少[链接到一些资源](https://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php?rq=1)并帮助他学习。 –

回答

9

&&||logical operators - 它们用于布尔条件语句。作为@towr和@ChrisHayes点,您可以使用andor代替&&||语法,尽管其优先级低于大多数其他运算符。

or然而,在这方面是完全不同的 - 它是control flow (see section 2.5.7: exit and return)的一部分。

布尔条件:

if ($foo == $bar || $bar != $bob) 

控制流:

mysql etc... or die(); 

您收到错误 “PHP的警告:mysql_close()预计参数1是资源......” 因为你”实际上并没有写出正确的语法,因此破坏了你的mysql_connect声明。

+2

最佳答案,但应解决优先级问题,即使该帖子没有提出问题并提及优先级不会直接回答问题。 – jeremy

+4

根据文档http://www.php.net/manual/en/language.operators.logical.php'或'和'和'也只是逻辑运算符,但它们的优先级比'||'差, ''&&。 – towr

+0

另外,你能否引用你的消息来源? – jeremy

5

andor具有比&&||更高优先级低。更精确地,&&||具有比赋值运算符(=)更高的优先级,而andor具有更低的优先级。

http://www.php.net/manual/en/language.operators.precedence.php

通常它不会有所作为,但有些时候不知道这个区别可能会导致一些意外的行为的情况。见的例子在这里:

http://php.net/manual/en/language.operators.logical.php

EDIT(由@towr建议):

适用于手头上的问题,这意味着,在第一种情况下,我们分配给$connmysql_connect(....) || die('....'),因为||值比=有更高的优先权。这里的问题是$conn现在是一个布尔值,而不是资源。

在第二种情况下,我们OR表达$conn = mysql_connect(....)die('....'),因为=OR一个优先级数字。我们对布尔值不做任何处理,$conn只是我们在第一个表达式中分配给它的资源(如果它没有失败)。

+0

-1,不回答问题 – jeremy

+3

@Jeremy它的确如此,因为这意味着 '$ foo = $ a || $ b'等于'$ foo =($ a || $ b')等于'$ foo =($ a或$ b'),而'$ foo = $ a或$ b'等于'($ foo = $ a) || $ b'等于('$ foo = $ a)或者$ b' – towr

+0

嗯...所以把它应用到OP的问题中,它是如何回答的? – jeremy

相关问题