Перейти к содержимому



Не подключается к БД

#1 Kuchuluk
Kuchuluk
  • Неактивные
  • 333 сообщений
  • Репутация: 5
0

Обновлено 26 июня 2018 - 10:20  Отправлено 25 июня 2018 - 09:15

Здравствуйте.

Использовал простой mysql_connect запрос, все работало.

Перешел на mysqli, не подключается к базе. Такой запрос $db = mysqli_connect("localhost", "root", "", "database")

В phpinfo показывает что mysqli включен. Но делаю var_dump($db) и показывает NULL

В чем еще может быть проблема?

 

Добавлено:

сейчас заметил не работает, когда соединение с БД лежит в отдельном файле db.php . Если ложу строку $db = mysqli_connect("localhost", "root", "", "telecomloc"); в функцию, в которой делаю выборку, то есть так

function getUserByLogin($login) {
	$sql = "SELECT * FROM `users` WHERE `username` = '{$login}'";
	$db = mysqli_connect("localhost", "root", "", "database");
	$query = mysqli_query($db, "SELECT * FROM `users` WHERE `username` = 'myname'");
	$row = mysqli_fetch_assoc($query);
}

тогда выборка проходит.

Это что получается, что когда используется расширение mysqli, то подключение к БД и сами запросы должны лежать рядом обязательно?


 

 

Сообщение отредактировал Kuchuluk: 25 июня 2018 - 09:58

  • 0

#2 miketomlin
miketomlin
  • Пользователь
  • 576 сообщений
  • Репутация: 119

Отправлено 25 июня 2018 - 12:21

Это что получается, что когда используется расширение mysqli, то подключение к БД и сами запросы должны лежать рядом обязательно?
Нет конечно. Нужно показывать код, который не работает, а не который «начинает работать».

 

Если включить Вангу, предположу, что пытаетесь использовать глоб. переменную внутри ф-ции без соотв. ссылки или без передачи через параметр ф-ции. Либо неправильно подключаете включаемый файл, например не указываете путь.

 

P.S. Нужно в обязательном порядке проверять в коде результат подключения к серверу БД и результаты запросов. При разработке также можно выводить номера/тексты ошибок, а не писать, скажем, их в лог.


P.P.S. Если не хотите использовать глоб. переменную, сделайте что-то вроде шаблона «реестр». На процедурке делается при помощи лок. стат. переменных.


  • 0


#3 fedornabilkin
fedornabilkin
  • Модератор
  • 1 191 сообщений
  • Репутация: 206

Отправлено 26 июня 2018 - 10:20

Классы надо использовать. Об этом ведь все постоянно пишут и говорят. Я долго время использовал вот такой. Он был выдран из DLE каким-то юным разработчиком и допилен под свои нужды. Я тоже немного допиливал.

Спойлер

 

Где-то в конфиге определяем константы DBUSER, DBPASS, DBNAME, DBHOST (есть же такой файл с настройками?). Там же, например, определяем переменную $db = new Mysql(); (Конечно же необходимо, чтобы класс Mysql был подключен загрузчиком или хардкорно через require_once). При этом соединение с БД еще не будет происходить, потому что нет нужды. А произойдет оно при первом запросе к базе. Запросы можно строить следующим образом.

// обычный запрос, возвращает ресурс
$sql = "SELECT * FROM `users` WHERE `id` = '1';";
$query = $db->query($sql);
// дальше из этого запроса можно получить данные
$user = $db->get_row($query); // $user содержит ассоциативный массив данных
// очень удобен такой вариант
$sql = "SELECT * FROM `users` WHERE `id` = '1';";
$user = $db->super_query($sql); // тот же массив, но в две строки
// список пользователей
$sql = "SELECT * FROM `users`;";
$users = $db->super_query($sql, true);
foreach($users as $row){
    echo $row['login'] . '<br>'; // login это название поля в таблице users в БД
}

Если пошариться по классу, можно увидеть, что есть возможность отслеживать количество запросов к базе, время, затраченное на каждый запрос и т.д. Если возникнет ошибка, то можно увидеть запрос, который ее возник (константа DBSHOW_ERROR должна быть установлена в true).

 

Конфиг у меня такой

$cfg['db']['host'] = "localhost";
$cfg['db']['name'] = "name";
$cfg['db']['user'] = "user";
$cfg['db']['pass'] = "pass";
$cfg['db']['charset'] = "utf8";
$cfg['db']['show_error'] = true;

Где-то в файле инициализации приложения объявляю константы

define ("DBHOST", $cfg['db']['host']); 
define ("DBNAME", $cfg['db']['name']);
define ("DBUSER", $cfg['db']['user']);
define ("DBPASS", $cfg['db']['pass']);
define ("COLLATE", $cfg['db']['charset']);
define ("DBSHOW_ERROR", $cfg['db']['show_error']);

  • 0

Надо обсудить предложение. А тут знакосчиталка считает знаки. Про Yii2 написано.





Похожие темы
  Название темы Автор Статистика Последнее сообщение

Пользователь месяца
Megoydagi Megoydagi 1-й за Август
Очков активности: 30 4 темы, 8 сообщений, 1 балл репутации
Сайт: bank.net.ru
ТОП самых активных за этот месяц
  • Фотография Vmir
    #1

    Vmir
    Очков активности: 48 3 темы, 7 сообщений, 2 балла репутации

  • Фотография BLIK
    #2

    BLIK
    Очков активности: 40.5 Вне конкурса за определение пользователя месяца

  • Фотография SergiuS85
    #3

    SergiuS85
    Очков активности: 12 2 темы, 2 сообщения, 1 балл репутации

  • Фотография WGN
    #4

    WGN (worldgamenews.com)
    Очков активности: 12 1 тема, 5 сообщений, 1 балл репутации

  • Фотография Totti
    #5

    Totti
    Очков активности: 12 0 тем, 8 сообщений, 1 балл репутации

  • Фотография kuztoday
    #6

    kuztoday
    Очков активности: 10.5 1 тема, 4 сообщения, 1 балл репутации

  • Фотография Zevss
    #7

    Zevss (domles43.ru)
    Очков активности: 10.5 2 темы, 1 сообщение, 1 балл репутации

  • Фотография Sale_account
    #8

    Sale_account
    Очков активности: 10.5 2 темы, 1 сообщение, 1 балл репутации

  • Фотография Megoydagi
    #9

    Megoydagi (bank.net.ru)
    Очков активности: 9 Вне конкурса за определение пользователя месяца

  • Фотография mkreine
    #10

    mkreine (analiz-krovi.net)
    Очков активности: 9 1 тема, 3 сообщения, 1 балл репутации

  • Показать весь ТОП 10

Поддержите форум! =)
Топ 5 участников по репутации

Оформление форума – IPBSkins.ru