// -------------到目前为止的故事------------- \
大家好我习惯使用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()
函数的工作方式相同?或者最好的方法是在哪里进行最小的改变。
最后,任何人都能解释以这种方式连接的差异/好处,或者哪种方式更好/更有效?
任何人都可以分享的任何帮助或理解将不胜感激。