Автор Тема: Ошибка при выполнении mysqli_query  (Прочитано 73 раз)

18 Июль 2020, 14:32:05
  • Фрилансер
  • *
  • Сообщений: 221
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте
Мне понадобилось обратиться из Админки к другой БД (на том же сервере)
Делаю это следующим образом:
$sql = "SHOW TABLE STATUS LIKE 'ps_shop'";
$list = mysqli_query($link, $sql)  or die(mysqli_error($link));

Все работает хорошо
Меняю запрос :
$sql = "select * from `ps_shop`";
Выскакивает ошибка : Internal Server Error
Решил попробовать включить показ ошибок - запрос сработал корректно.
В итоге: в режиме показа ошибок - работает, без показа ошибок - Internal Server Error

Что не так делаю?
19 Июль 2020, 11:43:33
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 1639
  • Репутация: +46/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Из админки sql запросы в менеджере идут по данным из конф. файла сайта. К другой базе нельзя подключится.
$sql = "select * from `ps_shop`";выберет все из базы сайта.
19 Июль 2020, 11:50:50
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 21915
  • Репутация: +25297/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}
Покажет в чем проблема с соединением.
Или так
Цитировать
mysqli::$error - Возвращает строку с описанием последней ошибки
https://php.ru/manual/mysqli.error.html
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
19 Июль 2020, 11:57:28
Ответ #3
  • Фрилансер
  • *
  • Сообщений: 221
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Из админки sql запросы в менеджере идут по данным из конф. файла сайта. К другой базе нельзя подключится.
$sql = "select * from `ps_shop`";выберет все из базы сайта.
Я это обхожу путем:
$host = Configuration::get('PS_ANY_HOST');
$user = Configuration::get('PS_ANY_USER');
$hash = Configuration::get('PS_ANY_HASH');
$bd = Configuration::get('PS_ANY_BD');
$link = mysqli_connect($host, $user, $hash, $bd) or die(mysqli_error($link));
        mysqli_query($link,$sql);
просто не загромождал код в теме
19 Июль 2020, 12:05:11
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 16108
  • Репутация: +14614/-5
  • Сообщество PrestaShop
    • Просмотр профиля
$list = mysqli_query($link, $sql)  or die(mysqli_error($link));$list и в другой раз пишите
$link = mysqli_connect($host, $user, $hash, $bd) or die(mysqli_error($link)); $link
19 Июль 2020, 12:12:35
Ответ #5
  • Фрилансер
  • *
  • Сообщений: 221
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}
Покажет в чем проблема с соединением.
Или так
Цитировать
mysqli::$error - Возвращает строку с описанием последней ошибки
https://php.ru/manual/mysqli.error.html
Спасибо.
Проблему решил:
Вот такая конструкция вываливается с ошибкой на первой строке
$list = mysqli_query($link, $sql);
$list_arr = mysqli_fetch_all($list, MYSQLI_ASSOC);
А эта же команда, но в одну строку работает как надо
$list_arr = mysqli_fetch_all( mysqli_query($link, $sql) , MYSQLI_ASSOC);
Вот как-то так
19 Июль 2020, 15:02:50
Ответ #6
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86634
  • Репутация: +25422/-0
  • Сообщество PrestaShop
    • Просмотр профиля
$link = mysqli_connect($host, $user, $hash, $bd) or die(mysqli_error($link)); То что вы пишите, это не рабочий код. В случае ошибки вы опять провоцируете ошибку, поэтому в режиме отладке работает, так как не прерывается и продолжает выполнение. Код выполняется справа и при какой-то ошибки соединения переменная $link, котороя не иницилизированная, передается в mysqli_error.
<?php
// определяете переменные $host, $user, $pwd, $bd

$link mysqli_connect($host$user$pwd$bd);

if (!
$link) {
    die(
'Ошибка подключения (' mysqli_connect_errno() . ') '
            
mysqli_connect_error());
}