mysqli没有;t使用die()返回实例


mysqli doesn't return instance with die()

我有函数:

function dbConnect($usertype, $connectionType = 'mysqli') {
   // some code hare
   return new mysqli($host, $user, $pwd, $db) or die ('Cannot open database');
}

但当我尝试这个:

$conn = dbConnect('read');
$result = $conn->query('SELECT * FROM images');

函数不返回任何内容,它说:

致命错误:对中的非对象调用成员函数query()C: 第10行的''examplep''htdocs''phpsols''mysql''mysqli.php

但它是这样工作的(没有死亡)

return new mysqli($host, $user, $pwd, $db);

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

因为new mysqli永远不会为false,所以"die"永远不会被处理,因此,您的函数返回true,而不是新创建的mysqli实例。

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

$result = new mysqli($host, $user, $pwd, $db) ;
if (!$result) die ("Can't open database.");
return $result;

你可以试试这个:

function dbConnect($usertype, $connectionType = 'mysqli') {
   // some code hare
   try {
       return new mysqli($host, $user, $pwd, $db);
   } catch(Exception $e) {
       die ('Cannot open database');
   }
}

除了这个有趣的单行问题之外,您对错误处理的想法都是错误的。遗憾的是,它也被复制粘贴到了另一个答案上。

这是正确的代码

$mysqli = new mysqli($host, $user, $pwd, $db);
if ( mysqli_connect_errno() )
{
    throw new Exception(mysqli_connect_errno()." ".mysqli_connect_error());
}
return $mysqli;

老实说,die ('something');是PHP的一种儿童疾病。是时候长大一点了。