mysqli_connect()vs新PDO连接和查询

时间:2018-03-07 10:03:34

标签: php sql pdo database-connection

// -------------到目前为止的故事------------- \

大家好我习惯使用mysqli_connect()函数开发来连接到db,如下所示:

<?php  
$db_host = "localhost"; 
$db_username = "root";
$db_pass = "pass";  
$db_name = "db"; 

$connect = mysqli_connect("$db_host","$db_username","$db_pass") or die ("could not connect to mysql");
mysqli_select_db($connect, "$db_name") or die ("no database");
?>

当我以这种方式连接时,我总是写下我的查询:

$sql = mysqli_query($connect, "INSERT INTO table (column1, column2, column3) VALUES('$value1','$value2','$value3')") or die (mysql_error());

但是,我最近一直在与一家新托管公司合作开展一个项目,但该公司并未允许这样做。上面的连接脚本会出现500错误,当我问托管公司他们说要使用我以前从未做过的PDO连接时。

我现在可以使用此脚本进行连接:

<?php
class DbConnect {
    const DB_HOSTNAME = 'localhost';
    const DB_USERNAME = 'root';
    const DB_PASSWORD = 'pass';
    const DB_DATABASE = 'db';
    public $error;

    public function connect() {
        try {
            $db = new \PDO("mysql:dbname=" . self::DB_DATABASE . ";host=" . self::DB_HOSTNAME, self::DB_USERNAME, self::DB_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (\PDOException $e) {
            $this->error = $e->getMessage();
            return FALSE;
        }
        return $db;
    }

    public function fail($message) {
        $out = "{$message}";
        return $out;
    }

    public function success($message) {
        $out = "{$message}";  
        return $out;
    }
}

$connect = new DbConnect;
$db = $connect->connect();
if ($db === FALSE) {
    echo $connect->fail($connect->error);
} else {
    echo $connect->success("Connected to database");
}
?>

但是,我现在正试图将其整合到整个网站中,并且遇到了一些问题。

// -------------我要问的是什么------------- \

首先,我只是使用<?php include_once("../connect_to_sql.php"); ?>将另一个连接脚本替换为另一个连接脚本(我没想到它只是想看看我得到了什么样的错误)除了一个充满错误的页面,我在最顶层得到了以下内容。我认为如果它本身是连接的,那么我的其他页面上应该没有任何内容可以导致连接失败:

SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

其次,当我在其他文件中正确连接时,我不想更改我正在制作的每个查询。第二个连接文件中的$connect变量是否与mysqli_query()函数的工作方式相同?或者最好的方法是在哪里进行最小的改变。

最后,任何人都能解释以这种方式连接的差异/好处,或者哪种方式更好/更有效?

任何人都可以分享的任何帮助或理解将不胜感激。

0 个答案:

没有答案