[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP не видит MySQL connect'а в function
BorodinKO
Листинг №1 файл /include/SQL.php
$dbh = new PDO("mysql:host=localhost;dbname=DBNAME", "ROOT", "12345"); 


Листинг №2 файл index.php


include '/include/SQL.php';
$result = $dbh->query("SELECT * FROM `table`");
// ...
function test(){
$result = $dbh->query("SELECT * FROM `table`");
// ...
}
test()


Код представленный на 2 листинге содержит Инклуду на коннект к моей БД /include/SQL.php и 2 запроса к БД, один из них находится в функции test(), при этом первый запрос работает как положено, а 2(находящийся в функции) ругается на отсутствие подключения к БД

Решаю эту проблему добавлением еще одной инклуды в тело функции test():


include '/include/SQL.php';
$result = $dbh->query("SELECT * FROM `table`");
// ...
function test(){
include '/include/SQL.php';
$result = $dbh->query("SELECT * FROM `table`");
// ...
}
test()

В моей работе очень много функций и процедур, и в каждой где есть работа с БД мне приходится писать инкулду на коннект.
Как можно заставить работать функции с БД бед дополнительных инклуд?

tomash
$dbh должна быть в глобальной области видимости, можно реализовать через глобальные переменные, либо через статические методы класса который отвечает за подключение к СУБД.

_____________
Чтобы понять, что такое рекурсия - нужно понять, что такое рекурсия.
BorodinKO
Так попробовал $dbh сделать глобальным

файл /include/SQL.php

global $dbh;
$dbh = new PDO("mysql:host=localhost;dbname=DBNAME", "ROOT", "12345");


Но ошибка от этого не убралась
tomash
function test(){
global $dbh;
$result = $dbh->query("SELECT * FROM `table`");
// ...
}


_____________
Чтобы понять, что такое рекурсия - нужно понять, что такое рекурсия.
BorodinKO
а статические методы класса который отвечает за подключение к СУБД это как и как это реализовать?
tomash
class DB {
private $instance = null;

private function __construct($params){
// код конструктора
}

public function instance($params){
if(self::$instance === null){
self::$instance = new self($params);
}
return self::$instance;
}
}


function test(){
$result = DB::instance($params)->query("SELECT * FROM `table`");
// ...
}


это черновик, общий так сказать смысл....

почитайте шаблон проектирования "фабричный метод"

_____________
Чтобы понять, что такое рекурсия - нужно понять, что такое рекурсия.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.