Loading...
Можно ли сделать 2 подключения ПДОк базе обычное и функцией?
wtf
Да хоть десять. Плюс ещё и MySql с MySqi.
Кинь пример как хочешь подключить.
Вот родное подключение
php
// Подключение к БД
$connect = new PDO(

// Хост, имя базы, кодировка
'mysql:host=' . $sys['db']['db_host'] . ';dbname=' . $sys['db']['db_name'] . ';charset=utf8',

// Юзер
$sys['db']['db_user'],

// Пароль
$sys['db']['db_pass'],

// Атрибуты
[
/*
// Сообщения об ошибках
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
*/
// Выборка данных по умолчанию
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,

// Буферизованные запросы
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,

// Эмуляция подготавливаемых запросов
PDO::ATTR_EMULATE_PREPARES => true

]

);
. А мне нужно сделать под этот шаблон

php
<?php
/*
-------------------------------
Класс для работы с базой данных
-------------------------------
*/

CLASS DB
{

//Объект PDO
PUBLIC STATIC $DB = NULL;

PUBLIC STATIC $ST = NULL;

//SQL запрос
PUBLIC STATIC $QUERY = '';

/*
--------------------------------------
Подключение драйвера PDO к базе данных
--------------------------------------
*/

PUBLIC STATIC FUNCTION CONNECT($status = 1)
{
IF (!SELF::$DB) {

TRY {

SELF::$DB = NEW PDO(
// Хост, имя базы, кодировка
'mysql:host=' . $sys['db']['db_host'] . ';dbname=' . $sys['db']['db_name'] . ';charset=utf8',

// Юзер
$sys['db']['db_user'],

// Пароль
$sys['db']['db_pass'],

ARRAY(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")
);

SELF::$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

} CATCH (PDOException $e) {

IF ($status == 1){

ECHO "Нет подключения к базе данных<br /><br />";
ECHO "Параметры ошибки:<br /> " . $e->getMessage();
ECHO "<hr>";

}

}

}

RETURN SELF::$DB;

}

/*
--------------------------------------
Получение 1 строки из таблицы
--------------------------------------
*/

PUBLIC STATIC FUNCTION GET_STRING($query, $param = ARRAY())
{

IF (SELF::CONNECT(0)){

SELF::$ST = SELF::CONNECT()->PREPARE($query);
SELF::$ST->EXECUTE((ARRAY) $param);

RETURN SELF::$ST->FETCH(PDO::FETCH_ASSOC);

}

}

/*
--------------------------------------
Получение всех строк из таблицы
--------------------------------------
*/

PUBLIC STATIC FUNCTION GET_STRING_ALL($query, $param = ARRAY())
{

IF (SELF::CONNECT(0)){

SELF::$ST = SELF::CONNECT()->PREPARE($query);
SELF::$ST->EXECUTE((ARRAY) $param);

RETURN SELF::$ST;

}

}

/*
------------------------------
Получение 1 столбца из таблицы
------------------------------
*/

PUBLIC STATIC FUNCTION GET_COLUMN($query, $param = ARRAY())
{

IF (SELF::CONNECT(0)){

SELF::$ST = SELF::CONNECT()->PREPARE($query);
SELF::$ST->EXECUTE((ARRAY) $param);

RETURN SELF::$ST->FETCHCOLUMN();

}

}

/*
---------------------------
Добавление строки в таблицу
---------------------------
*/

PUBLIC STATIC FUNCTION GET_ADD($query, $param = ARRAY())
{

IF (SELF::CONNECT(0)){

SELF::$ST = SELF::CONNECT()->PREPARE($query);

RETURN (SELF::$ST->EXECUTE((ARRAY) $param)) ? SELF::CONNECT()->LASTINSERTID() : 0;

}

}

/*
-----------------------------------
Изменение/удаление строки в таблице
-----------------------------------
*/

PUBLIC STATIC FUNCTION GET_SET($query, $param = ARRAY())
{

IF (SELF::CONNECT(0)){

SELF::$ST = SELF::CONNECT()->PREPARE($query);

RETURN SELF::$ST->EXECUTE((ARRAY) $param);

}

}

/*
---------------------------------------------
Выполнение запроса в базу данных из SQL файла
---------------------------------------------
*/

PUBLIC STATIC FUNCTION GET_SQL_FILE($path_file)
{

$file = FILE_GET_CONTENTS($path_file);

$data = EXPLODE(';' , $file);

IF ($file){

FOREACH ($data AS $el){

DB::GET_ADD($el);

}

RETURN 1;

}ELSE{

RETURN 0;

}

}

}

?>




но чёт вылетает ошибка в хосте в бд!
________
посл. ред. 13.10.2020 в 22:44; всего 1 раз(а); by Nemos
TuT (13.10.2020 в 22:16)
Да хоть десять. Плюс ещё и MySql с MySqi.
Кинь пример как хочешь подключить.

Выше
Вылетает ошибка что проблема тут в CLASS BD:
php
// Хост, имя базы, кодировка
'mysql:host=' . $sys['db']['db_host'] . ';dbname=' . $sys['db']['db_name'] . ';charset=utf8',

// Юзер
$sys['db']['db_user'],

// Пароль
$sys['db']['db_pass'],
А переменная $sys откуда берется?
Все конфиги бд нужно прокинуть в метод класса, как аргументы
rekmixa (13.10.2020 в 22:59)
А переменная $sys откуда берется?
Все конфиги бд нужно прокинуть в метод класса, как аргументы

Ето твоя cms.. можешь помочь?
rekmixa (13.10.2020 в 22:59)
А переменная $sys откуда берется?
Все конфиги бд нужно прокинуть в метод класса, как аргументы

Это на RCMS15 пишу соцсеть...
Nemos, Код ошибки скинь. Да и что это за класс такой кривой? Вот по проще.
php
<?
define('DB_HOST', 'localhost'); // сервер
define('DB_NAME', ' '); // имя базы
define('DB_USER', ' '); // пользователь T8k6Y6z8
define('DB_PASS', ''); // пароль
define('DB_CHAR', 'utf8');
class MyPDO
{
public static $counter = 0;
protected static $instance = null;
//

public function __construct() {}
public function __clone() {}

public static function instance()
{

if (self::$instance === null)
{
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
PDO::ATTR_EMULATE_PREPARES => TRUE
);
try {
$dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHAR;
self::$instance = new PDO($dsn, DB_USER, DB_PASS, $opt);
} catch (PDOException $e) {

die('Ошибка подключения '. $e->getMessage());

}
}
return self::$instance;
}

public static function __callStatic($method, $args)
{
if ($method == 'query' || $method == 'execute') static::$counter++;
return call_user_func_array(array(self::instance(), $method), $args);
}

public static function run($sql, $args = array())
{
static::$counter++;
$stmt = self::instance()->prepare($sql);
$stmt->execute($args);
return $stmt;

}
/*Пример на выборку данных*/

$sql = MyPDO::run("SELECT * FROM `users` WHERE `id` = ? LIMIT 1", array($user['id']))->fetch();
echo $sql['login'];
/*На изменение таблиц */
MyPDO::run("UPDATE `users` SET `test` = ? WHERE `id` = ?", array(10,$user['id']));
}
/*Вывод количества запросов*/
echo MyPDO::$counter;

________
посл. ред. 13.10.2020 в 23:16; всего 2 раз(а); by TuT
Онлайн: 4
Время:
Gen. 0.1137
(c) Bym.Guru 2010-2025