Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: как узнать почему mysqli_query возвращает пустой массив?
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » как узнать почему mysqli_query возвращает пустой массив?

Страниц (1): [1]
 

1. trinkoo - 28 Марта, 2016 - 13:22:08 - перейти к сообщению
Есть php+MySQL связка на локальной машине внутри сетки. Сервера видны, phpMyAdmin и dbForge заходят штатно, сайты крутятся.

Есть БД, есть php скрипт, на котором я учусь работать с этой всей байдой.

PHP:
скопировать код в буфер обмена
  1.  
  2.  /*.. начало упускаем, переменные там существуют и имеют корректные проверенные значения*/
  3. try {
  4.    $connect = mysqli_connect($host,$user,$pwd,$port,$base);
  5.     /* $connect = mysqli_connect(connectstr_namig($host,$user,$pwd,$port,$base));*/
  6.  }
  7.  catch (Exception $e){
  8.      echo $e-getCode() . ' : ' .$e->getMessage();
  9.  }
  10.  
  11.      echo "<br/> Ну #^@*&...  ";
  12.  }
  13.  else{
  14.      echo "<br/>";
  15.      echo "I Feel Good!! (ту ру ру ру ру) <br/>";
  16.      echo '2*2='.(2*2);
  17.  }
  18. echo connectstr_namig($host, $user, $pwd, $port, $base);
  19. echo "<br/>";
  20. echo "<br/>";
  21.  
  22. $column='ID';
  23. $cvalue='1';
  24.  
  25. if ($result = mysqli_query($connect,'SELECT * FROM Casetype ORDER BY ID;' ))
  26. {
  27.     echo 'Select вернул %d строк'.  mysqli_num_rows($result);
  28. }
  29. else
  30. {
  31.     echo 'Select ни #^@ не вернул'." <br>";
  32.     echo "Почему?"." <br>";
  33.     {
  34.         printf("   Ага, код ошибки:", mysqli_connect_error());
  35.     }
  36.     else{
  37.     echo 'тю, #^@*, ошибки нет  - есть нулевой результат';}
  38. }  

Скрипт выводит следующее:

I Feel Good!! (ту ру ру ру ру)
2*2=4
...блаблабла...
Select ни #^@ не вернул
Почему?
тю, #^@*&, ошибки нет - есть нулевой результат

Вопросы следующие:
1. Как узнать чего ему не нравится?
2. Почему когда я задаю несуществующие логин или пароль - нет сообщения от catch (Exception $e){
echo $e-getCode() . ' : ' .$e->getMessage();
То есть, оно есть, но только если я совсем эпично косану - пропущу порт или ещё что. Если просто неправильная связка логин+пароль - делает вид, что всё хорошо и отсутствует значение в mysqli_connect_errno().

P.S. Буду весьма благодарен, я с php и SQL не работал ни когда.
(Добавление)
Да, возможно дело в отсутствии кавычек вокруг `Casetype` но сам вопрос от этого не меняется - почему я вижу просто пустой массив и как посмотреть что именно не так средствами php?
2. trinkoo - 28 Марта, 2016 - 23:45:45 - перейти к сообщению
"пъядайзаем йазгавой"(С) Карлсон.

Выяснилось следующее:

Если я пишу
$connect = mysqli_connect("192.168.1.11","user","password","base","3306");
то всё нормально.
А вот если
$connect = mysqli_connect("homeserver.org","user","password","base","3306");
тогда эффект полного молчания без ошибок и с пустыми переменными.
Да, на вопрос 1 из стартпоста я себе ответил - проверять на существование значения $connect. Если вообще "не попал в сервер" - там и будет пусто. Если при этом ещё и нет ошибок - однозначно не попал вообще. Иначе либо будет значение, либо ошибка (это если сервер с той стороны вообще есть и он там, куда я ему кричу).

Возник следующий вопрос: почему homeserver.org, прописанный в hosts на 192.168.1.11 не принимается sqli_connect-ом, тогда как непосредственный IP - принимается.
Может есть какие-то тонкости его написания?
3. 3d_killer - 29 Марта, 2016 - 00:01:21 - перейти к сообщению
в настройках сервера значит стоит пускать только по ip, либо днс не работает у вас
4. Viper - 29 Марта, 2016 - 00:11:31 - перейти к сообщению
trinkoo пишет:
Возник следующий вопрос
потому что найдите отличия
CODE (htmlphp):
скопировать код в буфер обмена
  1. user:password@192.168.1.11

и
CODE (htmlphp):
скопировать код в буфер обмена
  1. user:password@homeserver.org

(Добавление)
3d_killer пишет:
в настройках сервера значит стоит пускать только по ip, либо днс не работает у вас
вообще ни причем.
5. trinkoo - 29 Марта, 2016 - 00:13:45 - перейти к сообщению
[quote=3d_killer][/quote]
Нет ни какого DNS - это винда. Файл hosts напрямую присваивает IP. Без всяких DNS.
К апачу прекрасно получается обращаться.
А вот с MySQL, видимо, какая-то проблема.

А где такая настройка "пускать только по IP"? Юзер в базе - да, тот привязан к IP, но как может SQL-сервер знать где я нашел его IP в hosts у себя на винте, или на DNS сервере - для меня загадка.

Всё-таки, думаю проблема не с сервером, а с mysqli - он как-то обходит рекомендации файла hosts и пытается найти homeserver.org на ДНС-сервере, и он его находит! такой есть но там нет SQL сервера - я проверял Ха-ха

Вот как бы посмотреть куда он шастает и почему игнорирует hosts...
(Добавление)
Viper пишет:
trinkoo пишет:
Возник следующий вопрос
потому что найдите отличия
CODE (htmlphp):
скопировать код в буфер обмена
  1. user:password@192.168.1.11

и
CODE (htmlphp):
скопировать код в буфер обмена
  1. user:password@homeserver.org

(Добавление)
3d_killer пишет:
в настройках сервера значит стоит пускать только по ip, либо днс не работает у вас
вообще ни причем.


Стоп стоп стоп.
Не то.
192.168.1.11 - это САМ SQL сервер. Я НЕ с него захожу.
2 машины в одной локалке. 11 - статический IP - на нем развернут апач и майскуль.
Я захожу с другой машины - клиент не имеет отношения к 11 айпишнику. У клиента - свойIP, он сопоставлен юзверю в базе и всё нормально работает.

Связка такая:
1.11 - сервер.
1.7 - клиент.
Файл windows hosts - локальный заменитель DNS - там написано, что 192.168.1.11 = homeserver.org.
homeserver.org ... их в мире ДВА!!
Есть мой 1.11й IP, а есть где-то там... в интернетах ещё один homeserver.org!

Получается следующая коллизия - если клиент не будет следовать файлу windows hosts, то он полезет искать IP на DNS сервере и начнет долбиться в чей-то сайт, где не установлен SQL. Был бы он там - я бы получал ошибки авторизации, а я получил пустоту без ошибок.

На чьей стороне работает этот скрипт? Я не сильно понимаю в тонкостях строения php и не могу решить эту задачу без такого понимания.
(Добавление)
P.S. Всё, понял.
Скрипт работает на стороне сервера.
Я пишу ему localhost и он нормально отрабатывается, так как база там же и стоит на том же сервере.

Естественно, прибить 192.168.1.11 не только у клиента, но и у сервера к localhost я продолбал Радость

Спасибо за участие в беседе. Оно быстрее думается так, когда с кем-то обсуждаешь.
6. Viper - 29 Марта, 2016 - 00:36:44 - перейти к сообщению
trinkoo пишет:
На чьей стороне работает этот скрипт?
скрипт на стороне сервера.
7. trinkoo - 29 Марта, 2016 - 01:21:49 - перейти к сообщению
Viper пишет:
скрипт на стороне сервера.

Совершенно увидел.
И дело было в неправильно настроенном интранете - без DNS-сервера надо в hosts руками всем одно и то же записать было.
Но вопрос породил ещё один вопрос.
Когда я долблюсь из десктопного приложения на С# через коннектор в майскуль сервер , которого нет - я получаю ошибку. Я могу её увидеть - там будет написано, что на той стороне майскуль не установлен.

В php я получил тишину и не присвоенные значения переменных.
Может я где-то не там смотрю?

Как узнать, что на той стороне не запущен сервер?
8. Viper - 29 Марта, 2016 - 10:13:05 - перейти к сообщению
try/catch для mysqli_connect не имеет смысла. Функция не кидает исключений.
пример внимательно смотрите http://php.net/manual/en/mysqli....onnect-error.php
9. trinkoo - 29 Марта, 2016 - 20:23:19 - перейти к сообщению
Ааалилуйя.
Да, это то, что надо. ->connect_error.
Странно, что я впервые вижу этот пример. В основном находится какой-то шлак, типа того, что я выше использовал.

P.S. Интересный эффект образовался. Я прибил гвоздём на хосте IP 192.168.1.11 к homeserver.org.

Теперь всё прекрасно работает кроме... localhost Улыбка Вместо локалхоста юзер идёт с суффиксом @имя_машины_в_сети.

Поскольку в основном на хостингах сетевой вход в майскуль запрещен - придётся открутить обратно.
Но эксперимент выдался интересным Улыбка

 

Powered by ExBB FM 1.0 RC1