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

时间:2013-08-21 08:22:26

标签: php mysql mysqli return 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()   第10行的C:\ xampp \ htdocs \ phpsols \ mysql \ mysqli.php

但它以这种方式工作(没有die())

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

3 个答案:

答案 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的儿童疾病。是时候长大了一点。