1001 тупой вопрос по php+mySQL секас/ как узнать почему mysqliquery не возвращает ни чего?

Статус: Offline
Реєстрація: 01.06.2015
Повідом.: 6468
1001 тупой вопрос по php+mySQL секас/ как узнать почему mysqliquery не возвращает ни чего?

сабж:
PHP:
try {
   $connect = mysqli_connect($host,$user,$pwd,$port,$base);
    /* $connect = mysqli_connect(connectstr_namig($host,$user,$pwd,$port,$base));*/
 }
 catch (Exception $e){
     echo $e-getCode() . ' : ' .$e->getMessage();
 }

 if ( mysqli_connect_errno()){
     echo "<br/> Ну блядь...  ";
 }
 else{
     echo "<br/>";
     echo "I Feel Good!! (ту ру ру ру ру) <br/>";
     echo '2*2='.(2*2);
 }
echo connectstr_namig($host, $user, $pwd, $port, $base);
echo "<br/>";
echo "<br/>";

$column='ID';
$cvalue='1';

if ($result = mysqli_query($connect,'SELECT * FROM Casetype ORDER BY ID;' ))
{
    echo 'Select вернул %d строк'.  mysqli_num_rows($result);
}
else
{
    echo 'Select ни хуя не вернул'." <br>";
    echo "Почему?"." <br>";
    if (mysqli_connect_error())
    {
        printf("   Ага, код ошибки:", mysqli_connect_error());
    }
    else{
    echo 'тю, блядь, ошибки нет  - есть нулевой результат';}
}
Ответі:

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

Как узнать чего ему не нравится?

Заметил - если я юзера с паролем неправильно сопоставляю - ексцепшен при коннекте тоже не возникает. Возникает только если я там порт забуду вообще вписать и т.д. грубые ошибки. Ошибка уатентификации где смотрится?
 
Дааа... на ХФ мощнейший раздел вебмастеров :D
Аж 30 просмотров...

Ладно, упрощаем (или усложняем? хез...) задачу:

Ответ на вопрос 1: узнать, что ему не нравится можно по сочетанию значений в $connect и mysqli_connect_errno()

Если $connect пустой, нет ексцепшена в catch подключения и пустой mysqli_connect_errno - на том конце не найден сервер вообще. Неправильный IP.
Вот так у меня и происходило.

Теперь новый вопрос:
если я пишу так:
PHP:
$connect = mysqli_connect("homeserver.org","user","password","basename","3306");
то получаю болтяку с левой резьбой на, примерно, 48 (или 52... надо перемерять).
А если пишу:
mysqli_connect("192.168.1.11","user","password","basename","3306");
Вс' происходит нормально.
Так вот, почему не виден homeserver.org, прописанный в hosts на 192.168.1.11, а в прямом виде IP - работает нормально.

mysqli не пользуется hosts?



P.S. Если до завтра ни кто не ответит на вопрос - я решу, что я - самый крутой вебмастер на ХФ :D

Я нашел ответ.
 
Останнє редагування:
Дааа... на ХФ мощнейший раздел вебмастеров
Для неумных и наглых ТС-ов - вебмастера не занимаются программированием, а программисты не ходят в раздел, куда ты засунул свою тему. Переместил из "Вебмастер" в "Программирование".



Код:
$connect=mysqli_connect($host,$user,$pwd,$port,$base);
/*$connect*=*mysqli_connect(connectstr_namig($host,$user,$pwd,$port,$base));*/
}
host
Может быть именем хоста или IP адресом. Передача NULL или строки "localhost" этому параметру означает, что в качестве хоста будет использоваться локальная машина, на которой запущен скрипт. Если есть такая возможность, будут использоваться пайпы вместо протокола TCP/IP.
1. поскольку у тебя указано в параметре host днс-ное имя - попытка коннекта осуществляется по TCP/IP. далее начинают работать gethostbyname() у php , и gethostbyaddr() у mysql. Соотв. - автору надо думать, кому (user@host) прописывать гранты в mysql.user.
Трудно анализировать ошибку авторизации, не видя того хоста, кому выдан грант для user. У тебя грант выдан явно не тому, кто лезет к мусклю.

Кстати, gethostbyaddr() никакими hosts не пользуется, оно пользуется dns

2. из мануала к mysqli
Процедурный стиль

<?php
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');

if (!$link) {
die('Ошибка подключения (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
.....
твой вариант
PHP:
try {
   $connect = mysqli_connect($host,$user,$pwd,$port,$base);
    /* $connect = mysqli_connect(connectstr_namig($host,$user,$pwd,$port,$base));*/
 }
 catch (Exception $e){
     echo $e-getCode() . ' : ' .$e->getMessage();
 }

 if ( mysqli_connect_errno()){
     echo "<br/> Ну блядь...  ";
 }
без комментариев. Вернее - к автору кода (кто сказал, что генерируется исключение при ?)
Проверить успешность создания подключения можно либо функцией mysqli_connect_error() или с помощью свойства mysqli->connect_error, как показано в примерах.

p.s.
вся эта твоя хня планируется в продакшн на хостинг? учти, что у нормальных хостеров (да и у ненормальных - тоже) мускл запускается со --skip-networking , потому настоятельно рекомендую работать через файл-сокет локалхоста. с "grant .... to 'user'@'localhost'...." и соотв. коннект тоже на localhost.

я его и так знаю.



зы.....
 
Для неумных и наглых ТС-ов - вебмастера не занимаются программированием, а программисты не ходят в раздел, куда ты засунул свою тему. Переместил из "Вебмастер" в "Программирование".
для самовлюбленніх модераторов
https://ru.wikipedia.org/wiki/Веб-мастер
Веб-мастер (встречается также вариант вебмастер; веб-разработчик) — человек, занимающийся разработкой веб-сайтов или корпоративных приложений для Интернета. В зависимости от размера коллектива разработчиков, он может объединять в себе функции автора, дизайнера, верстальщика веб-страниц, программиста, системного администратора, модератора, контент-менеджера (ответственного за содержимое), сотрудника технической поддержки, специалиста по продвижению сайта (SEO, «раскрутка») и другие. Подобные специалисты чаще всего разрабатывают и поддерживают небольшие сайты, так как крупные (и дорогие) интернет-порталы имеют возможность распределить роли на нескольких специалистов (или заказать их услуги в специализированных агентствах).
Подправьте тогда статью в вики, Ві, видимо, лучше разбираетесь.
Вопрос относится к программированию меньше всего. Вопрос состоит в организации взаимодействия со связкой вебсервер+пхп+MySQL база в локальной сети по принципу "интранет" (интернет внутри локалки). Если это не вебмастеринг - где я могу получить тиару папы римского и папамобиль?

Программирование там присутствует ситуативно, основная проблема не в скрипте.
1. поскольку у тебя указано в параметре host днс-ное имя - попытка коннекта осуществляется по TCP/IP. далее начинают работать gethostbyname() у php , и gethostbyaddr() у mysql. Соотв. - автору надо думать, кому (user@host) прописывать гранты в mysql.user.
Трудно анализировать ошибку авторизации, не видя того хоста, кому выдан грант для user. У тебя грант выдан явно не тому, кто лезет к мусклю.
тому, но... да, не тому :)
Кто лезет в майскуль? Я? Нет, не я. Он запущен на localhost и к нему лезет скрипт. В этом исток вопроса.

Кстати, gethostbyaddr() никакими hosts не пользуется, оно пользуется dns
пользуется. Я прописал в хостс редирект и всё за работало. Откуда он тогда узнал, если не пользуется им?
2. из мануала к mysqli
Да, действительно пустота переменной означает ошибку подключения. Но хочется же всегда большого и светлого! Например - понять не только, что не удалось, но и почему.
Если я из C# через коннектор стучусь в никуда - я получаю ексцепшен и в нем есть описание, что на той стороне нет сервера. Хотелось бы и в php иметь такую возможность.

без комментариев. Вернее - к автору кода (кто сказал, что генерируется исключение при ?)
Автор кода сказал, но писать ему не буду - некогда.
Я проверял - возникает. Но не в этом случае. Возникало, когда я порт тупо забыл прописать в строке коннекта.
p.s.
вся эта твоя хня планируется в продакшн на хостинг? учти, что у нормальных хостеров (да и у ненормальных - тоже) мускл запускается со --skip-networking , потому настоятельно рекомендую работать через файл-сокет локалхоста. с "grant .... to 'user'@'localhost'...." и соотв. коннект тоже на localhost.

мм... как бы так сказать... я из php, в принципе, могу, конечно, стучаться в сторонний SQL-сервер на другом хосте, но применений такой связки вижу немного.
Да, это один хост и на нем и апач и, собсно, MySQL. И апач, крутящий скрипт, да - это localhost для майскуля.
я его и так знаю.
.
Нет, не знаешь, иначе написал бы :)

P.S. поскольку, да, скрипт крутится действительно на localhost - DNS сервер для правильного взаимодействия должен быть един. Но у меня нет ни какого DNS-сервера в моем интранете. Только ручками в хостс.

Проблема состояла в том, что homeserver.org надо было прибить гвоздем к IP хоста не только на клиенте, но и на самом хосте, так как сам хост - сам себе и клиент - php драйвер является клиентом для MySQL сервера.

После прописывания в hosts 192.168.1.11 homederver.org - всё заработало.



Ну и следующее, что ни кто не по советовал сделать, но сделать было нужно.

Вопрос: как правильно проверить соединение на ошибки (правильно это не просто одуплить, что не паааалллучилааась, а ещё и прочитать почему).
 
Останнє редагування:
Ну так я ж тебе написал, как. mysqli_error() обработать, если !connect(), там описание. А в errno - только код (номер) ошибки.

PHP:
<?php
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');

if (!$link) {
die('Ошибка подключения (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
 
Ну так я ж тебе написал, как. mysqli_error() обработать, если !connect(), там описание. А в errno - только код (номер) ошибки.

PHP:
<?php
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');

if (!$link) {
die('Ошибка подключения (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
:рл: я уже нашел , что надо в ->error() смотреть. Вопрос-то был не в этом!
Вопрос состоял в том - какого хрена несостоявшийся коннект не является ошибкой и его кода нет в errno.

Пример из php мануала прекрасно заработал
Тільки зареєстровані користувачі бачать весь контент у цьому розділі


PHP:
<?php
$mysqli = @new mysqli('localhost', 'fake_user', 'my_password', 'my_db');

// Works as of PHP 5.2.9 and 5.3.0.
if ($mysqli->connect_error) {
    die('Connect Error: ' . $mysqli->connect_error);
}
?>

Теперь я гуру разворачивания вебсайтов внутри одноранговой локалки :)
Следующий шаг - выпереть наружу реальный IP и наслаждаться небольшим личным хостингом с терабайтным винтом и физическим выделенным сервером.

P.S. Уговорите димокса исправить цветовую схему подсветки тэга
PHP:
 - нихуя не видно на черной схеме форума.
Действительно, на error смотреть совет был, но я его не одуплил в болотно-зеленом шрифте на черном фоне, извиняюсь.
 
Назад
Зверху Знизу