LoneSimba
Нубило-всея-планеты
Второй вопрос: Вопросы нуба в PDO, PHP и многом другом
Пишу код своего недодвижка, решил сделать универсальность ДБ. Проверка Database.class.php выдает ошибку
Fatal error: Call to a member function query() on null in C:\xampp-\htdocs\RCE\functional\database.class.php on line 73
Собственно, вот код:
Про создание велосипеда мозги не мойте, прошу. И про default тоже. Ошибка указывается в query_DB, в $db->query();. По моей логике, эта переменная должна заполнится в load_DB, и в скрипте, откуда был вызван класс, идет первой load. Прямое указание MYSQLI не помогает.
Пишу код своего недодвижка, решил сделать универсальность ДБ. Проверка Database.class.php выдает ошибку
Fatal error: Call to a member function query() on null in C:\xampp-\htdocs\RCE\functional\database.class.php on line 73
Собственно, вот код:
PHP:
require('../config.php');
class Database
{
private $db;
/**
* Подключает ДБ через указанный драйвер
* @param string $driver Драйвер ДБ. По умолчанию MySQLi
*/
function load_DB($driver = 'mysqli')
{
global $config;
switch ($driver) {
case 'mysql':
mysql_connect($config['db_host'],$config['db_user'],$config['db_pass'])
or die("Connect error(".mysql_errno()."): ".mysql_error());
mysql_select_db($config['db_name'])
or die("DB connect error(".mysql_errno()."): ".mysql_error());
mysql_set_charset('utf8')
or die("Charset change error: ".mysql_error());
break;
case 'mysqli':
$db = new mysqli("p:".$config['db_host'],$config['db_user'],$config['db_pass'],$config['db_name']);
if($db->connect_error) {
die("Connect error(".$db->connect_errno."): ".$db->connect_error);
}
if(!$db->set_charset('utf8')) {
die("Charset change error: ".$db->error);
}
break;
/*case 'pdo':
$dsn = 'mysql:dbname='.$config['db_name'].';host='.$config['db_host'].';charset=UTF8';
$user = $config['db_user'];
$password = $config['db_pass'];
try {
$pdo = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Подключение не удалось: ' . $e->getMessage();
}
break;*/
default: //Для того, чтобы не было никаких ошибок с неопределенным дравером
$driver = 'mysqli';
$this->load_DB($driver);
break;
}
}
/**
* Для процедурного выполнения вызывается как обычная mysql_query($query), для выполнения каких либо операций над результатом запроса создается указатель $foo_query = query($driver,$query)
* @param string $driver драйвер БД
* @param string $query запрос в формате SQL
*/
function query_DB($driver = 'mysqli', $query)
{
$db = $this->db;
switch ($driver) {
case 'mysql':
mysql_query($query);
break;
case 'mysqli':
$db->query($query);
break;
/*case 'pdo':
$pdo->query($query);
break;*/
default: //Для того, чтобы не было никаких ошибок с неопределенным дравером
$driver = 'mysqli';
$this->query_DB($driver,$query);
break;
}
}
/**
* Создается указателем $foo_nums = num_rows($driver,$query_result), где $query_result - ранее вызванная $foo_query, либо как обычная mysql_num_rows для процедурного выполнения
* @param string $driver драйвер БД
* @param string $query_result указатель ранее вызванной query_DB()
*/
function num_rows_DB($driver = 'mysqli', $query_result)
{
switch ($driver) {
case 'mysql':
mysql_num_rows($query_result);
break;
case 'mysqli':
$num_rows = $query_result->num_rows();
break;
/*case 'pdo':
$num_rows = PDO::query("SELECT COUNT(*) AS ROW_COUNT FROM(".$query_result.")");
break;*/
default:
$driver = 'mysqli';
$this->num_rows_DB($driver, $query_result);
break;
}
}
}
Про создание велосипеда мозги не мойте, прошу. И про default тоже. Ошибка указывается в query_DB, в $db->query();. По моей логике, эта переменная должна заполнится в load_DB, и в скрипте, откуда был вызван класс, идет первой load. Прямое указание MYSQLI не помогает.
Последнее редактирование: