我应该使用哪种方法?为什么?

3
我正在使用以下函数连接PHP数据库:

$DBConn = mysql_connect("localhost", "testuser", "test123")

释放连接时,我使用以下代码:
if( is_resource($DBConn) )

检查当前是否已经设置了连接。我想知道这样做是否高效,或者我应该像这样检查连接

if( $DBConn )

我想了解使用这两个语句的优缺点。


5
如果您正在编写一些新的高端代码,请考虑将 mysql_* 更换为 PDO,这是一个很好的时机 :) - Fluffeh
1
没有值得一提的区别。使用第二个选项,更容易阅读。 - Jon
5
@Mayank PDO是一种连接数据库的安全、高效、可靠方法。我想说,现在正是考虑使用新的连接对象/函数并编写它以使用预处理语句来避免注入攻击的好时机! - Fluffeh
1
@Mayank:开销可能比布尔测试大,也可能不大。无论哪种情况下较慢的那个都会慢一些,但差距非常小,除非您迭代几百万次,否则永远无法测量它。但是,这个测试的性质是您最多只会执行几次。正如我所说,没有值得一提的区别。 - Jon
同意@Fluffeh的观点。现在切换到PDO吧。旧的mysql_xx()函数已经被认为是过时的——即使PHP手册也建议不要使用它们。 - SDC
显示剩余2条评论
3个回答

1
首先,您不应再使用mysql_xxx函数;有许多文章讨论了使用PDO / mysqli的预处理语句等好处。
通过查看手册,它指出返回链接标识符或失败的false。您不应该假设此标识符是什么,它通常是资源,但也可能是对象或整数。我会简单地否定更容易的条件:
if (false !== $DBConn) {
    // do something with the database
}

或者,另一种选择:

if (false === $DBConn) {
    throw new Exception("Could not connect to database");
}
// do something with the database

编辑

使用if ($DBConn) { ... }也可以,因为它基本上是0、false、null、""和空数组的相反。


0
成功连接或查询后,将返回资源标识符。因此,函数is_resource将会将变量标识为资源或false。
如果If表达式评估为TRUE,PHP将执行语句,如果它评估为FALSE,则不会执行。

0

它们本质上是相同的,尽管有人可能会争辩称调用is_resource方法会带来调用函数的开销,但if也必须确定这一点,实际上两者之间几乎没有区别。这完全取决于您的编码风格和可读性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接