Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 29.06.2014
Сообщений: 19

Как вынести подключение к бд в конструктор или функцию?

25.01.2016, 10:27. Показов 2288. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня класс со множеством методов, которыми я взаимодействую с базой данных. И в начале каждого метода у меня повторяются строки где я подключаюсь к бд. Пытался этот код вынести в конструктор или в другую функцию - методы перестают работать. Что можно сделать что бы не было повторений?

Я про эти строки:
PHP
1
2
3
4
$mysqli = new mysqli('localhost', 'root', '', 'family');
            if ($mysqli->connect_error) 
                die('Ошибка подключения (' . $mysqli->connect_errno . ') '
                    . $mysqli->connect_error);
В этом коде
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class NewDb{
    function __construct(){
        
        }
        function saveFile($name, $ref){
            $mysqli = new mysqli('localhost', 'root', '', 'family');
            if ($mysqli->connect_error) 
                die('Ошибка подключения (' . $mysqli->connect_errno . ') '
                    . $mysqli->connect_error);
            $sql = "INSERT INTO files(name, ref)
                            VALUES('$name', '$ref')";
            $mysqli->query($sql);
            $mysqli->close();
        }
        function download(){
            $mysqli = new mysqli('localhost', 'root', '', 'family');
            if ($mysqli->connect_error) 
                die('Ошибка подключения (' . $mysqli->connect_errno . ') '
                    . $mysqli->connect_error);
            $sql = "SELECT name, ref FROM files";
            $result = $mysqli->query($sql);
            $array = array();
            while($row = $result->fetch_assoc()){
                $array[] = $row;
            }
            $mysqli->close();
            if($array)
                return $array;
            else
                return false;
        }
        function saveDistr($ref, $task, $member){
            $mysqli = new mysqli('localhost', 'root', '', 'family');
            if ($mysqli->connect_error) 
                die('Ошибка подключения (' . $mysqli->connect_errno . ') '
                    . $mysqli->connect_error);
            $sql = "INSERT INTO distribute(fileref, task, member, status)
                            VALUES('$ref', '$task', '$member', '0')";
            $res = $mysqli->query($sql);
            $mysqli->close();
            if($res){
                return true;
            }
            else{
                return false;
            }
        }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.01.2016, 10:27
Ответы с готовыми решениями:

Если вынести QTemporaryFile в отдельный класс или функцию, возникает ошибка
Привет. Имею след. код: QString filename = "C:\\33.txt"; QString password = "1234"; const int BUFFER_SIZE = 1024 *...

Как вынести подключение к БД в отдельный поток?
Как вынести подключение бд в отдельный поток???Вот код программы: import android.os.Bundle; import android.view.View; import...

Подключение библиотек или как реализовать функцию Бесселя
Как подключить библиотеку AlgLib к проекту в MV Studio 2010 C# ? или помогите реализвовать функцию Бесселя на языке C#

8
140 / 96 / 47
Регистрация: 03.08.2013
Сообщений: 765
25.01.2016, 10:31
Можно через глобальную переменную сделать (у меня так устроено, удобно).

PHP
1
2
3
4
5
global $sqli_link;
$sqli_link = new mysqli('localhost', 'root', '', 'family');
            if ($mysqli->connect_error) 
                die('Ошибка подключения (' . $mysqli->connect_errno . ') '
                    . $mysqli->connect_error);
А в методах и функциях использовать так:
PHP
1
2
3
4
5
6
7
function saveFile($name, $ref){
            global $mysqli;
            $sql = "INSERT INTO files(name, ref)
                            VALUES('$name', '$ref')";
            $mysqli->query($sql);
            $mysqli->close();
        }
0
0 / 0 / 0
Регистрация: 29.06.2014
Сообщений: 19
25.01.2016, 10:53  [ТС]
Вот так использую. Не работает. Что не так?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
global $sqli_link;
$sqli_link = new mysqli('localhost', 'root', '', 'family');
            if ($mysqli->connect_error) 
                die('Ошибка подключения (' . $mysqli->connect_errno . ') '
                    . $mysqli->connect_error);
class NewDb{
    function download(){
        global $sqli_link;
            $sql = "SELECT name, ref FROM files";
            $result = $mysqli->query($sql);
            $array = array();
            while($row = $result->fetch_assoc()){
                $array[] = $row;
            }
            $mysqli->close();
            if($array)
                return $array;
            else
                return false;
        }
}
0
140 / 96 / 47
Регистрация: 03.08.2013
Сообщений: 765
25.01.2016, 11:08
У Вас переменная $sqli_link, а используете Вы $mysqli

Добавлено через 4 минуты
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
global $sqli_link;
$sqli_link = new mysqli('localhost', 'root', '', 'family');
            if ($sqli_link->connect_error) 
                die('Ошибка подключения (' . $sqli_link->connect_errno . ') '
                    . $sqli_link->connect_error);
class NewDb{
    function download(){
        global $sqli_link;
            $sql = "SELECT name, ref FROM files";
            $result = $sqli_link->query($sql);
            $array = array();
            while($row = $result->fetch_assoc()){
                $array[] = $row;
            }
            $sqli_link->close();
            if($array)
                return $array;
            else
                return false;
        }
}
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
25.01.2016, 11:43
Потратьте час на изучение singleton и примените его в своем коде, а global забудьте вообще
0
0 / 0 / 0
Регистрация: 29.06.2014
Сообщений: 19
26.01.2016, 21:39  [ТС]
illya05, а как правильно?
0
471 / 399 / 169
Регистрация: 04.01.2013
Сообщений: 1,675
26.01.2016, 21:41
Обратите внимание на строки 3 и 10, но повторюсь использование global - отвратительная практика
0
140 / 96 / 47
Регистрация: 03.08.2013
Сообщений: 765
26.01.2016, 21:47
Y0k3, Как вынести подключение к бд в конструктор или функцию?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
26.01.2016, 22:15
illya05, кажется, не ту ссылку дали...

Добавлено через 9 минут
Цитата Сообщение от Y0k3 Посмотреть сообщение
а как правильно?
Правильно сказали про синглтон. Ресурс соединения хранится в классе работы с БД, поэтому его не нужно передавать через глобал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.01.2016, 22:15
Помогаю со студенческими работами здесь

Как вынести сетевое подключение на рабочий стол в win 7?
У меня usb модем. Подключил и настроил его как телефонное соединение. Дозваниваться в инет сложно: - щелкаешь значок в трее, -...

Передача строки в конструктор или в функцию
Как передать в конструктор класса строку без массивов, да и в функцию как передать строку и дальше действия над ней производить?А то в...

Как вынести функцию с++ в отдельный файл
Как вынести функцию в отдельный файл как в PHP например: Например есть функция int function(){ int a,b,c; a=3; b=5; ...

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

Что лучше использовать - функцию-конструктор или инициализатор объектов?
Дайте совет новичку - что лучше использовать - функцию-конструктор или инициализатор объектов, чтобы создать объекты? Т.е. создавать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru