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


Пользователь месяца
TimurR TimurR 1-й за Август
Очков активности: 726 3 темы, 35 сообщений, 11 баллов репутации
ТОП самых активных за этот месяц
  • Фотография ShowPrint
    #1

    ShowPrint (ShowPrint.ru)
    Очков активности: 207 2 темы, 17 сообщений, 6 баллов репутации

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

    Ixman (o5cat.ru)
    Очков активности: 105 0 тем, 10 сообщений, 7 баллов репутации

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

    WGN (worldgamenews.com)
    Очков активности: 75 Вне конкурса за определение пользователя месяца

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

    magnet (rbfxdirect.com)
    Очков активности: 67.5 Вне конкурса за определение пользователя месяца

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

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

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

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

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

    AnnaYa (topbase.ru)
    Очков активности: 33 2 темы, 5 сообщений, 2 балла репутации

  • Фотография Алексей111
    #8

    Алексей111
    Очков активности: 28.5 5 тем, 4 сообщения, 1 балл репутации

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

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

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

    fedornabilkin (zaka4ano.ru)
    Очков активности: 24 0 тем, 4 сообщения, 4 балла репутации

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

Kwork.ru - услуги фрилансеров от 500 руб.

Поддержите форум! =)
Апдейты
  • Яндекс тИЦ: 19.11.2017
  • Яндекс выдача: 24.09.2018
Топ 5 участников по репутации


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

#1 Kuchuluk

Kuchuluk
  • Пользователь
  • 332 сообщений
  • Репутация: 5
0

Отправлено 25 June 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 June 2018 - 09:58

  • 0

#2 miketomlin

miketomlin
  • Пользователь
  • 502 сообщений
  • Репутация: 107

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

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

 

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

 

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


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


  • 0


#3 fedornabilkin

fedornabilkin
  • Модератор
  • 1127 сообщений
  • Репутация: 189

Отправлено 26 June 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 написано.





Похожие темы

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

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