$conn = mysql_connect($db_host,$db_user,$db_password) || die('Connection to mysql failed');
mysql_close($conn);
执行此代码时,显示以下警告。
PHP警告:mysql_close()要求参数1为资源,第45行的script.php中给出布尔值
$conn = mysql_connect($db_host,$db_user,$db_password) or die('Connection to mysql failed');
mysql_close($conn);
现在没有警告!?
答案 0 :(得分:9)
&&
和||
是logical operators - 它们用于布尔条件语句。正如@towr和@ChrisHayes指出的那样,您可以使用and
和or
代替&&
和||
语法,尽管优先级低于大多数其他运算符。
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
语句。
答案 1 :(得分:5)
and
和or
的 低于&&
和||
。更准确地说,&&
和||
的优先级高于赋值运算符(=
),而and
和or
的优先级更低。
http://www.php.net/manual/en/language.operators.precedence.php
通常它没有什么区别,但有些情况下,不知道这种差异会导致一些意想不到的行为。请参见此处的示例:
http://php.net/manual/en/language.operators.logical.php
编辑(由@towr建议):
应用于手头的问题,这意味着在第一种情况下,我们将值$conn
分配给 mysql_connect(....) || die('....'),
,因为||
的优先级高于=
。这里的问题是$conn
现在是布尔值,而不是资源。
在第二种情况下,我们OR
表达式$conn = mysql_connect(....)
和 die('....'),
因为=
具有比OR
更高的优先级。我们对布尔值没有任何作用,$conn
只是我们在第一个表达式中赋予它的资源(如果它没有失败)。