我有函数:
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的一种儿童疾病。是时候长大一点了。