运行 PHP5:对 MySQLi 连接的访问被拒绝,但 MySQL 成功

Running PHP5: access denied to MySQLi connection but success for MySQL

提问人:Christine268 提问时间:5/21/2015 最后编辑:MachavityChristine268 更新时间:10/9/2015 访问量:1210

问:

我运行了此代码以获得下图所示的输出:

<?php
  phpinfo();
?>

enter image description here

麻烦的是,我无法弄清楚为什么会这样:

$conn = @mysql_connect('host', 'user', 'pass') or die(mysql_error());
      @mysql_select_db('dbName') or die(mysql_error());

      $query="SELECT * FROM Clients";

     $result = @mysql_query($query) or die(mysql_error());
      if ($result)
      {
            $outp = "";
      while ($row = mysql_fetch_assoc($result))
      {

        if ($outp != "") {$outp .= ",";}
        $outp .= '{"ClientID":"'  . $row["cID"] . '",';
        $outp .= '"ClientsName":"'   . $row["clientsName"] . '"}'; 
      }
      mysql_free_result($result);
      }
    $outp ='{"records":['.$outp.']}';
    echo($outp);

但这并不意味着:

$conn = new mysqli("host", "user", "pass", "dbName");
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
echo "Connected successfully";
$result = $conn->query("SELECT * FROM Clients");

$outp = "";
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    if ($outp != "") {$outp .= ",";}
    $outp .= '{"ClientID":"'  . $rs["cID"] . '",';
    $outp .= '"ClientsName":"'   . $rs["clientsName"] . '"}'; 
}
$outp ='{"records":['.$outp.']}';
$conn->close();

echo($outp);

我得到的错误是:

连接失败:用户“user”@“host”对数据库“dbName”的访问被拒绝

我读到只要 PHP5 在运行,MySQLi 也已经安装好了。我还需要检查什么?也许我的代码做错了什么?这是我第一次尝试MySQLi,我已经多年没有连接到数据库了,不得不翻阅旧代码,只是为了获得旧的SQL方式连接到数据库。

PHP MySQLI

评论

0赞 Barmar 5/21/2015
您是否在同一台计算机上运行这两个脚本?
0赞 Christine268 5/21/2015
@Barmar 是的。一个文件,我只是更改了脚本(注释掉一个,运行另一个)。所以在同一主机上,等等。
0赞 Barmar 5/21/2015
那么我想不出任何很好的理由来解释为什么新的会像这样失败。仔细检查是否有错别字。
1赞 chiliNUT 5/21/2015
@Christine268 我只是说,比如,在不指定 dbname 的情况下连接到 mysqli,然后运行类似“select * from dbName.tablename”的查询,看看这是否会产生不同的结果
1赞 Christine268 5/21/2015
@chiliNUT你正在做某事。我从我的回声中得到了它说“连接成功”!所以我们现在有联系了。:)现在唯一奇怪的是回声($outp);没有回声。

答:

0赞 Peter B 6/2/2015 #1

您的代码看起来非常好。

确保身份验证详细信息中没有拼写错误。

其次,MySQL用户绑定到主机。例如。如果从远程主机进行连接,请确保已使用 % 通配符 like 设置用户 like 或允许所有主机。root@localhost[email protected]root@%

希望这会有所帮助。

0赞 TheSatinKnight 10/9/2015 #2

不久前,我遇到了一个 sql 客户端挑战,其中 php 版本导致客户端出于神秘的安全原因拒绝连接到 mysqli 中的服务器。为了解决这个问题,我不得不打开mysql的日志记录(调试日志记录),并在尝试后检查服务器上的调试日志。你的问题听起来很熟悉,甚至可能是同一个问题。如果我没记错的话,它需要更改密码类型。