Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysqli总是返回连接成功_Php_Mysql_Mysqli - Fatal编程技术网

Php Mysqli总是返回连接成功

Php Mysqli总是返回连接成功,php,mysql,mysqli,Php,Mysql,Mysqli,在我的所有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"]);

在我的所有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();
}
?>
我得到的不是成功,而是成功

Success... Localhost via UNIX socket
有人能告诉我为什么我一直收到这个虚假的成功信息吗? 编辑:我最终要寻找的不是我用于开发的每一条php错误消息(即ini_set('display_errors',1);),而是我放在If connection_error语句中的一条“fail”消息

Edit2:var_转储的结果($mysqli);使用错误的文件路径(parse_ini_file指向没有文件的位置)

以及var_dump(mysqli_connect_error())的结果

var_dump的结果($mysqli);使用正确的文件路径(已测试和验证)

如您所见,两个var_转储的结果是相同的(正常运行时间除外),无论我是否在parse_ini_文件中键入了正确的路径,或者是否将其指向了不存在文件的虚假位置

编辑3:问题已经回答,查看评论,直到我有足够的时间回答我自己的问题。

感谢用户“你的常识”为我指出了正确的方向

根据mysqli构造的文档,当主机为NULL或未定义时,当密码为NULL或未定义时,它默认为localhost

“MySQL服务器将尝试根据没有密码的用户记录对用户进行身份验证。”

因此,每当我指向一个伪造的文件位置时,它都会尝试使用任何不接受密码的用户名连接到本地主机。不幸的是,Mysql默认安装了三个具有全局访问权限且没有密码(仅限使用权限)的用户。导致我的虚假文件位置获得成功连接

解决方案是删除这三个用户(以及测试数据库)。我现在使用前面提到的任何方法都会失败,包括

if (NULL !== mysqli_connect_error()) { 
  die('fail'); 
} else {
  echo 'success';
}


您是否打开了错误报告功能?对于开发环境,设置:
error\u reporting(E\u ALL);ini设置(“显示错误”,1)我说的是“开发环境”。现在,您正在开发,因此需要错误消息进行调试。@Abishur-对不起,我不明白您的意思。您是否可以将其编辑到您的问题中,并剪切和粘贴您在
var\u dump($mysqli)
var\u dump(mysqli\u connect\u error())
中看到的连接正常且无效的精确值?没有虚假消息。你需要学会相信你的眼睛。您的输出清楚地表明mysqli已成功连接。所以,你需要更努力地让它失败。好吧,我相信我的眼睛,我成功地连接到了一个数据库,查看文档,当提供空值时,它确实假定为localhost,并尝试连接任何没有指定密码的用户。那么,如何才能找出它认为它连接的是谁以及连接到哪个数据库呢?我不知道答案,但现在我已经阅读了你的问题,我认为这是一个好问题。至少对我来说:)谢谢:)
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) } 
NULL
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
if (NULL !== mysqli_connect_error()) { 
  die('fail'); 
} else {
  echo 'success';
}
if (mysqli_connect_error()) {
    die('fail');
} else {
  echo 'success';
}
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
}