в первую очередь: Система Ubuntu 16.04 Apache2 PHP 7,2 дБ: 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;
}
}
Теперь здесь я получаю следующую ошибку:
не мог найти драйвер
Я пытаюсь в течение многих часов найти решение, но без успеха. Это работает, но не в классе?....
ПРЕДУПРЕЖДЕНИЕ! я падаю в подобной ошибке, когда я пытаюсь повредить строку подключения в строках кратных чисел и проиграл, 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;
}
, Что throwns PDOException: не мог найти драйвер.
проблема я нашел со строкой подключения: СТРОКА ПОВРЕЖДЕНИЯ + 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;
}
Это была просто опечатка... в классе, который это
myqsl
вместо
mysql