mysqli_connect有效但新的msqli没有

时间:2017-03-09 04:25:32

标签: php mysqli

尝试使用

连接到数据库
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
} else {
  echo '.';
}

我得到了

Connection failed: Access denied for user '*'@'localhost' to database '*'

但如果我使用

$conn = mysqli_connect($servername, $username, $password, $dbname);
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
} else {
  echo '.';
}

它有效!是什么给了什么?

我之前使用过新的mysqli并且工作正常。我知道我的用户名/密码是对的。它的GoDaddy和我点击了所有权限。发生了什么事?

编辑:

运行此:

<?php 
ini_set('display_errors',1);
error_reporting(E_ALL);

$servername = "localhost";
$username = "testuser";
$password = "testpassword";
$dbname = "testdb";

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn1 = mysqli_connect($servername, $username, $password, $dbname);
$conn2 = new mysqli($servername, $username, $password, $dbname);
var_dump($conn1->stat, $conn2->stat);

输出:

Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'Access denied for user 'testuser'@'localhost' to database 'testdb'' in /home/public_html/wj-test.php:11 
Stack trace: 
    #0 /home/public_html/wj-test.php(11): mysqli_connect('localhost', 'testuser', 'testpassword', 'testdb') 
    #1 {main} thrown in /home/public_html/wj-test.php on line 11

4 个答案:

答案 0 :(得分:0)

使用您的常识

你可能知道,这个世界没有魔法。因此,如果你面临一些奇怪的,不可能的行为,那就意味着要归咎于人为错误

显然,你的一些前提是错的。最有可能的是,程序版本也不起作用。所以你必须测试它。而且,如果要问一个问题,提供一个可靠的代码,进行明显的测试。从你的措辞方式来看,你并没有做出并排比较。

为什么不编写变量定义,然后编写程序,然后编写OOP变体,然后立即运行它?

这是你应该做的,而不是产生一些推测或推测。

强大的错误报告而非钝die("Connection failed:也有帮助。

<?php 
ini_set('display_errors',1);
error_reporting(E_ALL);

$servername = "";
$username = "";
$password = "";
$dbname = "";

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn1 = mysqli_connect($servername, $username, $password, $dbname);
$conn2 = new mysqli($servername, $username, $password, $dbname);
var_dump($conn1->stat, $conn2->stat);

这是你必须在这里发布的一个明智的问题。 你看,逐字告诉我们你做了什么,发誓你看到的东西在编程中不起作用。只有一个代码。

因此,请运行此确切代码(当然设置您的凭据)并在此处复制并粘贴其输出。

答案 1 :(得分:0)

我遇到了完全相反的情况,即新的mysqli()对我有用,而mysqli_connect()失败了。我通过定义SQL Server的端口并将“ localhost”更改为“ 127.0.0.1”来解决此问题。

因此,在上述情况下,请尝试:

        $.ajax({
        type: 'GET',
        url: "http://localhost/api/Piezas/Imagen/" + @Model.PiezaId,
        contentType: "application/octet-stream",
        success: function (datos) {
            //$("#image").attr("src", "data:image/png;base64," + datos);
        }
    });

和/或

$dbport = 3307;
$conn = new mysqli($servername, $username, $password, $dbname, $dbport);

也许此问题与在Synology NAS上运行MySQL和PHP有关。

答案 2 :(得分:-1)

在这里,可能有两个问题:

  • 数据库密码可能错误或密码为空。
  • 用户权限,此特定用户可能无权使用 这个DB。

登录root用户(超级用户)并检查mysql表以获取用户权限

答案 3 :(得分:-2)

帮助我的是将变量改为单引号......

    $servername = 'localhost';
    $username = 'testuser';
    $password = 'testpassword';
    $dbname = 'testdb';

// Create connection
$mysqli = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

else {
   echo "Connected.";
}

$conn->close();