私のすべてのphpページに、次のdb接続コードを含めます
<?php
$dbInfo = parse_ini_file('path/to/ini/file');
define ("HOST", $dbInfo["HOST"]); // The host you want to connect to.
define("USER", $dbInfo["USER"]); // The database username.
define("PASSWORD", $dbInfo["PASSWORD"]); // The database password.
define("DATABASE", $dbInfo["DATABASE"]); // The database name.
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
// If you are connecting via TCP/IP rather than a UNIX socket remember to add the port number as a parameter.
if (mysqli_connect_error()) {
die('fail');
} else {
echo 'success';
}
If ((USER == "USERNAME HERE") || (PASSWORD == "PASSWORD HERE")){
print 'ERROR - Please set up the script first';
exit();
}
?>
私が何をしても(パスワードを間違えたり、ファイルへのパスを間違えたりするなど)、常に「成功」がエコーされます。オブジェクト指向の If($mysqli->connect_error) を使用して、新しい mysqli の前に @ を付けて、エラーに try/catch を使用してみました。私がすることは何も返されません
私が置くとき
echo 'Success... ' . $mysqli->host_info . "\n";
エコー成功の代わりに、私は得る
Success... Localhost via UNIX socket
この偽の成功メッセージが表示され続ける理由を誰か教えてもらえますか? 編集: 私が最後に探しているのは、開発に使用するようなすべての php エラー メッセージ (つまり、ini_set('display_errors',1);) ではなく、 If connection_error ステートメント。
Edit2: var_dump($mysqli); の結果 不正なファイル パスを使用している (parse_ini_file がファイルのない場所を指している)
object(mysqli)#1 (19) { ["affected_rows"]=> int(0) ["client_info"]=> string(6) "5.5.32" ["client_version"]=> int(50532) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(23) "5.5.32-0ubuntu0.12.10.1" ["server_version"]=> int(50532) ["stat"]=> string(135) "Uptime: 8944 Threads: 1 Questions: 2445 Slow queries: 0 Opens: 275 Flush tables: 1 Open tables: 67 Queries per second avg: 0.273" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(468) ["warning_count"]=> int(0) }
そして var_dump(mysqli_connect_error()); の結果
NULL
var_dump($mysqli); の結果 正しいファイル パスを使用する (テストおよび検証済み)
object(mysqli)#1 (19) { ["affected_rows"]=> int(0) ["client_info"]=> string(6) "5.5.32" ["client_version"]=> int(50532) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(23) "5.5.32-0ubuntu0.12.10.1" ["server_version"]=> int(50532) ["stat"]=> string(136) "Uptime: 15306 Threads: 1 Questions: 2446 Slow queries: 0 Opens: 275 Flush tables: 1 Open tables: 67 Queries per second avg: 0.159" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(471) ["warning_count"]=> int(0) }
NULL
ご覧のとおり、正しいパスを parse_ini_file に入力したかどうか、またはファイルが存在しない偽の場所を指していたかどうかに関係なく、両方の var_dumps の結果は (稼働時間を除いて) 同じです。
編集 3: 質問に回答しました。自分の質問に答えるのに十分な時間が経過するまでコメントを見てください。