【问题标题】:Why do I connect to database no matter what为什么无论如何我都连接到数据库
【发布时间】:2016-04-11 12:28:04
【问题描述】:

php 新手。我一直在尝试查询数据库,并且不断收到无法完成查询的异常。我检查以确保我正在连接到数据库,一切看起来都很好,直到我深入挖掘。似乎我的代码告诉我,无论我输入什么密码、用户名,或者即使我没有定义这些数据,我都在连接到数据库。我不明白。最初我在一个函数中有以下代码,但我没有把它自己的页面调试:

<?php
echo'this is working so far <br>';

/*$db = 'fake';
$host = 'localhost';
$password = 'wrong';
$user = 'root';
*/

$result = new mysqli($host, $user, $password, $db);
if(!$result){
     echo 'did not connect to database';
    throw new Exception('Could not connect to database');

}
else{
    echo'connected to database';
    return $result; 
}

它总是告诉我我已连接到数据库..

【问题讨论】:

  • 为什么您的数据库的变量($host、$password 和 $user)被注释了?如果您正在执行与上面相同的代码,请务必取消注释它们。
  • 我将它们作为健全性检查进行评论,以确保无论我做什么,脚本仍然告诉我我已连接到数据库..

标签: php mysql database mysqli


【解决方案1】:

因为你正在混合Object oriented styleProcedural style 来检查数据库连接

程序风格

<?php
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');

if (!$link) {
    die('Connect Error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
}

echo 'Success... ' . mysqli_get_host_info($link) . "\n";

mysqli_close($link);
?>

面向对象的风格

<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}
?>

阅读http://php.net/manual/en/mysqli.construct.php

【讨论】:

  • 啊,我明白了,感谢您的快速响应。我正在关注这本书,这本书非常好link,除非我犯了错误,否则我认为我的做法与他们相同。所以对于 OO 风格,'new mysqli()' 函数创建了一个名为 $mysqli 的新对象,而过程风格创建了一个资源 $link?
  • @Saty 很好的答案。但我对这两种风格的用法有疑问。例如,如果我使用 OO 样式连接到数据库并以 Procedural 样式执行查询,该怎么办。它还会给出错误吗?我知道这是不好的做法,因为从长远来看,您不知道以前使用过什么,总体而言只是不好的做法,但我想知道。
  • @BRoebie 请阅读this
  • 谢谢你,这正是我要找的
  • 乐于助人!!@BRoebie
【解决方案2】:

注意:

仅面向 OO 语法:如果连接失败,仍会返回一个对象。要检查连接是否失败,请使用 mysqli_connect_error() 函数或 mysqli->connect_error 属性,如前面的示例所示。

Source

这意味着if($result) 无论如何检查总是正确的。所以不,您没有该数据库连接,但您正在错误地验证它,导致您相信您有。

你的支票应该是

if($result->connect_error)
     // no luck
else
     // game on

【讨论】:

    【解决方案3】:

    您应该检查connect_errno 属性,该属性存储了上次连接调用的错误代码。

    $mysqli = new mysqli($host, $user, $password, $db);
    /* check connection */
    if ($mysqli->connect_errno) {
        printf("Connect failed: %s\n", $mysqli->connect_error);
        exit();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 2017-11-21
      相关资源
      最近更新 更多