Раньше в процедурном методе с использованием MySQL я писал так
Например такие запросы:
$result = mysql_query("SELECT COUNT(*) FROM `images`");
или
$result = mysql_query("SELECT COUNT(*) FROM `images` WHERE `category_id` = '$category'");
Задача узнать точное количество полей в запросах выборки.
Получал результат так:
$num_rows = intval(mysql_result($result, 0));
Теперь мои запросы выглядят так:
$result = $db->query("SELECT COUNT(*) FROM `images`");
или
$result = $db->query("SELECT COUNT(*) FROM `images` WHERE `category_id` = '$category'");
Для справки что бы было понятнее мой класс 'db' наследует класс mysqli
Вот собственно и вопрос, Каким теперь образом получить количество полей в запросе выборки?
Спустя 1 час, 6 минут, 28 секунд (25.08.2012 - 08:13) johniek_comp написал(а):
а документацию почитать лень?
Спустя 14 минут, 3 секунды (25.08.2012 - 08:27) Гость_Андрей написал(а):
Цитата (johniek_comp @ 25.08.2012 - 09:13) |
а документацию почитать лень? |
Я задал конкретный вопрос, и жду помощи, а не высказываний типа почитай в документации, или погугли )
Во первых почитал, и там все это смутно и конкретно получить можно многими методами, но какой из них будет самым правильным, конкретно к применению класса mysqli, я так и не понял.
Если кто еще скажет, погугли ))
Гуглил, по поводу применения mysqli вместо mysql да еще и применительно к ООП, материала вообще очень мало, практически нет, а по скольку я еще очень слабо понимаю ООП и только недавно узнал о mysqli. То мне нужны конкретные примеры, именно на ООП и именно mysqli.
И да, я там почитал темы, и видел твои высказывания на тему ООП, ты сам вообще не чего не понимаешь в ООП, а мне тут даешь советы.
Спустя 57 минут, 6 секунд (25.08.2012 - 09:24) h234 написал(а):
Цитата (Гость_Андрей @ 25.08.2012 - 05:06) |
Вот собственно и вопрос, Каким теперь образом получить количество полей в запросе выборки? |
Ты уже получил их в $result, нужно извлечь нужные данные с помощью mysqli_result::fetch_assoc или mysqli_result::fetch_row
тыц
Спустя 1 час, 15 минут, 34 секунды (25.08.2012 - 10:39) johniek_comp написал(а):
Гость_Андрей
внимательно посмотри на дату постов, ок?
внимательно посмотри на дату постов, ок?
Спустя 4 часа, 22 минуты, 6 секунд (25.08.2012 - 15:01) Guest написал(а):
Цитата (h234 @ 25.08.2012 - 10:24) | ||
Ты уже получил их в $result, нужно извлечь нужные данные с помощью mysqli_result::fetch_assoc или mysqli_result::fetch_row тыц |
Ну то что результат у меня в $result это и дураку понятно
Почему mysqli_result::fetch_assoc или mysqli_result::fetch_row? Ведь они возвращают массив, почему не $field_count или $affected_rows.
Нужен самый правильный и красивый метод. Так как это делают профи, абы как я могу получить результат как минимум 6 способами. Какой самый правильный? Зачем мне массив, если тот же $field_count вернет мне int.
Спустя 3 часа, 49 минут, 47 секунд (25.08.2012 - 18:51) h234 написал(а):
Цитата (Guest @ 25.08.2012 - 13:01) |
почему не $field_count или $affected_rows. |
$field_count Возвращает число столбцов затронутых в последнем запросе.
$affected_rows Возвращает число строк, затронутых последним INSERT, UPDATE, REPLACE или DELETE запросом.
У тебя же запрос:
SELECT COUNT(*) FROM `images`
А результат его:
COUNT(*)
12
1 строка и 1 столбец. Делай выводы.
Спустя 3 часа, 56 минут, 13 секунд (25.08.2012 - 22:47) Гость_Андрей написал(а):
Цитата (h234 @ 25.08.2012 - 19:51) | ||
$field_count Возвращает число столбцов затронутых в последнем запросе. $affected_rows Возвращает число строк, затронутых последним INSERT, UPDATE, REPLACE или DELETE запросом. У тебя же запрос: SELECT COUNT(*) FROM `images` А результат его: COUNT(*) 1 строка и 1 столбец. Делай выводы. |
Тут все такие дают советы? Что никто не может дать конкретно, ответ, без делай выводы и так далее ))
Зачем вы мне пишите
$field_count Возвращает число столбцов затронутых в последнем запросе.
$affected_rows Возвращает число строк, затронутых последним INSERT, UPDATE, REPLACE или DELETE запросом.
Словно я этого не читал на php.net, я все это читал. Я вижу много вариантов, добиться одного и тогоже, но я хочу знать какой из них идеальный, и самый правильный, как бы сделал профи.
И от куда Вы взяли
COUNT(*)
12
Что еще за число 12?
Хочу получить конкретный совет, на примере, как это будет правильно. Сделать вывод я сам не могу, мог бы, не спрашивал бы тогда совета, просто все эти методы, свойства, похожи но до конца я не могу понять как они обрабатывают результат, и по этому хочу узнать именно в этой ситуации что будет правильнее использовать.
Что касается $affected_rows, она может работать также и с SELECTом, просто работать будет как mysqli_num_rows().
Кто нибудь пожалуйста напишите конкретный пример, как бы это сделали вы, и дайте пояснения, вот типа так. Я использовал $field_count, потому что-то то и то-то а вот это, например $affected_row, mysqli_result::fetch_assoc, mysqli_result::fetch_row, mysqli_result::$field_count, mysqli_result::$num_rows, я не использовал по той и по этой причине, не ужеле это сложно. Что бы человек вас понял. И сделал выводы.
Спустя 31 минута, 55 секунд (25.08.2012 - 23:19) Гость_Андрей написал(а):
А блин простите ради бога, $field_count Возвращает число столбцов а не строк, вот это уже я не внимательно прочитал мануал, по этому свойству. Ну с этим свойством понятно, отпадает конечно же ))
Но вопрос остается актуальным!
Но вопрос остается актуальным!
Спустя 11 минут, 52 секунды (25.08.2012 - 23:31) sergeiss написал(а):
Гость_Андрей - ты САМ пришел с вопросами, тебя никто не заставлял, поэтому угомони свою агрессивность. Возможно, это нормально для другого какого-нибудь форума, но мы тут это категорически не приветствуем.
Спустя 2 минуты, 21 секунда (25.08.2012 - 23:34) h234 написал(а):
12 это просто для примера.
Запрос типа select count(*)... возвращает одну ячейку. Поэтому свойство mysqli_result::$num_rows не подойдет, тк оно получает число рядов в результирующей выборке. В данном случае будет один.
Делай так:
Запрос типа select count(*)... возвращает одну ячейку. Поэтому свойство mysqli_result::$num_rows не подойдет, тк оно получает число рядов в результирующей выборке. В данном случае будет один.
Делай так:
$result = $db->query("SELECT COUNT(*) FROM `table`");
$row = $result->fetch_row();
echo $row[0];
Спустя 42 минуты, 25 секунд (26.08.2012 - 00:16) Гость_Андрей написал(а):
Цитата (sergeiss @ 26.08.2012 - 00:31) |
Гость_Андрей - ты САМ пришел с вопросами, тебя никто не заставлял, поэтому угомони свою агрессивность. Возможно, это нормально для другого какого-нибудь форума, но мы тут это категорически не приветствуем. |
Извините если показалось что я агрессивный, у меня даже в мыслях не было проявлять агрессию или кого-то обидеть. Просто все пишут советы, которые не дают мне внятный ответ, такой ответ который бы я понял. Поэтому всячески пытаюсь дать понять, что я не понимаю, и хочу получить подробный совет, ответ, помощь.
Спустя 15 минут, 34 секунды (26.08.2012 - 00:32) Гость_Андрей написал(а):
Цитата (h234 @ 26.08.2012 - 00:34) |
12 это просто для примера. Запрос типа select count(*)... возвращает одну ячейку. Поэтому свойство mysqli_result::$num_rows не подойдет, тк оно получает число рядов в результирующей выборке. В данном случае будет один. Делай так: $result = $db->query("SELECT COUNT(*) FROM `table`"); |
Ага, ясненько, ну этот вариант я рассматривал, но в таком случае получается не очень красиво и придется делать так:
$result = $db->query("SELECT COUNT(*) FROM `table`");
$row = $result->fetch_row();
$row = intval($row[0]);
То есть уже две строки кода вместо одной в моем процедурном методе.
$row = intval(mysql_result($result, 0));
По красивее нет варианта?
И еще мне не понятен один механизм. Я вижу везде в мануалах, такое обращение:
$row = $result->fetch_row();
Но вот не могу понять как это работает?
Ведь я нигде не создавал объект типа
$result = new mysqli_result();
тогда каким образом используя $result я обращаюсь к методу класса mysqli_result "fetch_row()"?
Растолкуйте пожалуйста.
Спустя 12 минут, 28 секунд (26.08.2012 - 00:44) Гость_Андрей написал(а):
Если я напишу так:
Это будет корректно, и правильно?
Просто в описании функции intval() написано следующее:
intval() нельзя использовать с объектами, попытка это сделать вызовет ошибку уровня E_NOTICE и вернет значение 1.
По идеи это не объект, а метод объекта, и он возвращает массив.
Ошибки типа E_NOTICE, вроде как нет.
Так можно делать?
$row = intval($result->fetch_row());
Это будет корректно, и правильно?
Просто в описании функции intval() написано следующее:
intval() нельзя использовать с объектами, попытка это сделать вызовет ошибку уровня E_NOTICE и вернет значение 1.
По идеи это не объект, а метод объекта, и он возвращает массив.
Ошибки типа E_NOTICE, вроде как нет.
Так можно делать?
Спустя 34 минуты, 17 секунд (26.08.2012 - 01:18) Гость_Андрей написал(а):
А нет, так работать не будет, я гоню:
Этож массив, все время возвращается единица )
Тогда вопрос выше снимается ) Нужно зарегистрироваться, а то не могу удалять и редактировать свои посты )
$row = intval($result->fetch_row());
Этож массив, все время возвращается единица )
Тогда вопрос выше снимается ) Нужно зарегистрироваться, а то не могу удалять и редактировать свои посты )
Спустя 7 часов, 48 минут, 52 секунды (26.08.2012 - 09:07) h234 написал(а):
Цитата |
тогда каким образом используя $result я обращаюсь к методу класса mysqli_result "fetch_row()"? |
Из документации:
Возвращаемые значения
Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
Т.е. при успешном SELECT запросе mysqli_query() вернет объект класса mysqli_result
Спустя 31 минута, 30 секунд (26.08.2012 - 09:39) PHP_Fox написал(а):
Цитата (h234 @ 26.08.2012 - 10:07) | ||
Из документации: Возвращаемые значения Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE. Т.е. при успешном SELECT запросе mysqli_query() вернет объект класса mysqli_result |
Ага, вот как!? Теперь понятненько, спасибочки тебе h234 :)
А что по поводу моего первого вопроса? Нет способа по красивее чем этот?
$result = $db->query("SELECT COUNT(*) FROM `table`");
$row = $result->fetch_row();
$row = intval($row[0]);
Или это самый короткий, и самый лучший?
Спустя 14 минут, 3 секунды (26.08.2012 - 09:53) h234 написал(а):
Цитата |
Или это самый короткий, и самый лучший? |
Да
Спустя 9 минут, 26 секунд (26.08.2012 - 10:02) PHP_Fox написал(а):
Цитата (h234 @ 26.08.2012 - 10:53) | ||
Да |
Ясненько!
Тогда еще такой вопросик. Везде в мануале вижу что результат как-то закрывается вот так
$result = $db->query("SELECT COUNT(*) FROM `table`");
$row = $result->fetch_row();
$row = intval($row[0]);
$result->close();
Раньше в старом методе такого не было, можешь объяснить для чего это делается? И я смотрю что в самом классе нет метода close(). Тогда как? Ведь теперь $result это объект класса mysqli_result.
Спустя 20 минут, 38 секунд (26.08.2012 - 10:23) h234 написал(а):
Цитата |
Раньше в старом методе такого не было, можешь объяснить для чего это делается? И я смотрю что в самом классе нет метода close(). Тогда как? Ведь теперь $result это объект класса mysqli_result. |
Методом mysqli_result::close освобождается память, связанная с результатом
Спустя 6 минут, 55 секунд (26.08.2012 - 10:30) PHP_Fox написал(а):
Цитата (h234 @ 26.08.2012 - 11:23) | ||
Методом mysqli_result::close освобождается память, связанная с результатом |
Я так и предполагал, но не был уверен Спасибо!
Тогда вот это все просто синонимы друг друга?
void mysqli_result::free ( void )
void mysqli_result::close ( void )
void mysqli_result::free_result ( void )
Спустя 6 минут, 4 секунды (26.08.2012 - 10:36) h234 написал(а):
Цитата |
Тогда вот это все просто синонимы друг друга? |
Да
Спустя 4 минуты, 50 секунд (26.08.2012 - 10:41) PHP_Fox написал(а):
h234 Спасибо тебе огромное, ты мне очень помог, а то несколько дней сидел и не мог в этом разобраться Ты очень хорошо объясняешь, еще раз Спасибо тебе
Все тема закрыта!
Все тема закрыта!
Спустя 3 часа, 29 минут, 55 секунд (26.08.2012 - 14:11) alexbel2404 написал(а):
Intval то зачем? Или ты боишься, что вернется float? Такого не бывает