我有功能:
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() 第10行的C:\ xampp \ htdocs \ phpsols \ mysql \ mysqli.php
但它以这种方式工作(没有die())
return new mysqli($host, $user, $pwd, $db);
答案 0 :(得分: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;
答案 1 :(得分:1)
你可以试试这个:
function dbConnect($usertype, $connectionType = 'mysqli') {
// some code hare
try {
return new mysqli($host, $user, $pwd, $db);
} catch(Exception $e) {
die ('Cannot open database');
}
}
答案 2 :(得分:-2)
除了这个有趣的单线问题,你对错误处理的想法都是错误的。可悲的是,它也被复制粘贴到其他答案。
这是正确的代码
$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的儿童疾病。是时候长大了一点。