3

我正在阅读一本关于 PHP 的书,并且对这个示例有疑问:

<?php
function dbConnect() {
    $host = 'localhost';
    $db = 'learnphp';
    $user = 'phplearner';
    $pwd = 'wxyz1234';
    return new mysqli($host, $user, $pwd, $db) or die("Can't open database");
}
$conn = dbConnect();
$sql = 'SELECT * FROM images';
$result = $conn->query($sql);
$numRows = $result->num_rows;
?>
<p>A total of <?php echo $numRows; ?> records were found.</p>

它不能在我的本地服务器中运行(XAMPP 1.8.1;PHP 5.4.7;mysqlnd 5.0.10 - 20111026;MySQL 5.5.27) - 带有以下错误消息:

致命错误:在第11行对D:\xampp\htdocs\learnphp\mysql\mysqli.php中的非对象调用成员函数 query()

但是,当我更改此行时:

    return new mysqli($host, $user, $pwd, $db) or die("Can't open database");

至:

    $mysqliobj = new mysqli($host, $user, $pwd, $db) or die("Can't open database");
    return $mysqliobj;

它可以正常工作:

共找到 8 条记录。

为什么我不能return new mysqli(...)像示例一样使用?这是 PHP 5.4+ 的新编码要求吗?

4

2 回答 2

5

[..] or die()构造与 return 语句一起导致了有趣的行为:整个事情被解释为一个布尔表达式。

并且因为new mysqli永远不会为假,所以永远不会处理“die”,因此,您的函数返回true而不是新创建的mysqli.

编辑:

如果您仍想使用or die(),请执行以下操作:

$result = new mysqli($host, $user, $pwd, $db) ;
if (!$result) die ("Can't open database.");
return $result;
于 2013-08-07T07:47:56.810 回答
0

改变这个...

return new mysqli($host, $user, $pwd, $db) or die("Can't open database");

到这个..

return mysqli_connect($host, $user, $pwd, $db) or die("Can't open database");
于 2013-08-07T07:49:35.903 回答