-2

私は機能を持っています:

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');

関数は何も返さず、次のように言います:

致命的なエラー: 10 行目の C:\xampp\htdocs\phpsols\mysql\mysqli.php の非オブジェクトに対するメンバー関数 query() の呼び出し

しかし、それはこのように機能します(die()なしで)

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

3 に答える 3

5

この[..] or die()構文は、return ステートメントと組み合わせて奇妙な動作を引き起こします。すべてがブール式として解釈されます。

また、new mysqliwill が false になることはないため、「ダイ」は処理されないため、true新しく作成された のインスタンスの代わりに関数が返されますmysqli

それでも を使用したい場合は、次のようにしますor die()

$result = new mysqli($host, $user, $pwd, $db) ;
if (!$result) die ("Can't open database.");
return $result;
于 2013-08-21T08:23:35.723 に答える
-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の子供の病気です。少し大人になる時期。

于 2013-08-21T08:31:30.880 に答える