php7.2 和 PDO-‘无法找到驱动程序’

php7.2 和 PDO-‘无法找到驱动程序’

首先:系统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;
}

相关内容