У вас есть несколько вопросов:
- Проблема с драйвером.
Драйвер называется mysql
, вы ввели mysqli
. mysqli
- это расширение для PHP, которое заменило старое устаревшее расширение mysql
. К сожалению, ни один из них не имеет ничего общего с PDO.
Драйвер, который вы ищете - mysql
. Первое изменение должно изменить 'mysqli:host=$hostname;$dbname'
на 'mysql:host=$hostname;$dbname'
.
'
против ''
Вы используете одинарную кавычку, но похоже, что вы пытаетесь использовать значения $hostname
и $dbname
в вашей строке dsn. Если вы хотите использовать эти переменные, вам нужно использовать двойные кавычки для PHP для выполнения замены. Использование одинарных кавычек буквально вставит $hostname
и $dbname
в аргумент.
Второе изменение происходит от 'mysql:host=$hostname;$dbname'
до "mysql:host=$hostname;$dbname"
$dbname
не определено.
Вам нужно будет сделать это в области видимости.
function testdb_connect ($hostname, $username, $password, $dbname){
$db = new PDO("mysql:host=$hostname;$dbname", $username, $password);
return $db;
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
- DSN ищет имя базы данных. Не файл SQL.
$dbname
означает "portfolio_blog.sql"
, что означает, что вы пытаетесь загрузить файл .sql
. Вместо этого вам нужно будет указать имя базы данных. Я не знаю, что это такое, поэтому вам, вероятно, понадобится поместить это в себя.
Я думаю, вам нужно изменить свой DSN, чтобы обработать это снова.
Пример, предполагая, что имя базы данных portfolio_blog
:
$dbname = "portfolio_blog"
и
"mysql:host=$hostname;dbname=$dbname"
Я бы порекомендовал что-то вроде этого:
<?php
ob_start();
session_start();
//database credentials
$hostname = "localhost";
$username = "root";
$password = "";
$dbname = "portfolio_blog";
global $db;
function testdb_connect ($hostname, $username, $password, $dbname){
$db = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $db;
}
try {
$db = testdb_connect ($hostname, $username, $password, $dbname);
echo 'Connected to database';
}
catch(PDOException $e) {
echo $e->getMessage();
}
Есть большая вероятность, что я что-то пропустил, вам придется принимать сообщения об ошибках по мере их поступления.
Удачи.