为什么我连接到数据库无论如何

时间:2016-01-07 07:35:27

标签: php mysql database mysqli

对于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; 
}

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

3 个答案:

答案 0 :(得分:2)

因为您要将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

答案 1 :(得分:1)

您应该检查存储上次连接呼叫错误代码的connect_errno属性。

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

答案 2 :(得分:1)

  

注意:

     

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

<强> Source

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

您的支票应

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