首先:系统Ubuntu 16.04 Apache2 PHP 7.2 DB:MYSQL
现在有以下问题:我有两个项目,第一个项目只是一个 php 文件,其中包含以下代码
<?php
$servername ='localhost';
$username = 'root';
$password = '12345';
$dbname = 'test';
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
do stuff ...
}
catch(PDOException $e) {
echo $e->getMessage();
}
这工作正常,我能够连接到数据库并获取所需的数据。
现在我想做点不同的事情:
<?php
class Database {
// DB Params
private $host = 'localhost';
private $db_name = "test";
private $username = "root";
private $password = "12345";
private $conn;
// DB Connect
public function connect() {
$this->conn = null;
echo "connect() - ";
try {
$this->conn = new PDO('myqsl:host=' . $this->host . ';dbname=' . $this->db_name, $this->username, $this->password);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'HEY! Connection Error: ' . $e->getMessage();
}
return $this->conn;
}
}
现在我收到以下错误:
找不到驱动程序
我花了几个小时寻找解决方案,但没有成功。它有效但不是在课堂上?......
答案1
这只是一个打字错误...在课堂上
韓國
代替
mysql
答案2
警告! 当我尝试破坏多行连接字符串并损失 2 小时并尝试重新安装驱动程序和配置时,我也犯了类似的错误:
define('DB_HOST', 'localhost');
define('DB_BASE', 'mydb');
define('DB_USER', 'root');
define('DB_PASSWORD', 'root');
try {
$conn = new PDO('
mysql:host=' . DB_HOST . ';dbname=' . DB_BASE . ';charset=utf8mb4',
DB_USER, DB_PASSWORD);
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch(PDOException $e){
print 'Error!: ' . $e->getMessage() . PHP_EOL;
}
这会引发 PDOException:找不到驱动程序。
我发现连接字符串的问题: BREAK LINE + mysql:host ... 与 mysql:host ... 不同
解决方案:只需将 ' 像下面这样放置,就不会破坏连接字符串:
try {
$conn = new PDO(
'mysql:host=' . DB_HOST . ';dbname=' . DB_BASE . ';charset=utf8mb4',
DB_USER, DB_PASSWORD);
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch(PDOException $e){
print 'Error!: ' . $e->getMessage() . PHP_EOL;
}