[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Количество записей в таблице ООП-MySQLi
Гость_Андрей
Пытаюсь освоить ООП с приминением MySQLi и вот сталкнулся с такой не поняткой.
Раньше в процедурном методе с использованием 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.

И да, я там почитал темы, и видел твои высказывания на тему ООП, ты сам вообще не чего не понимаешь в ООП, а мне тут даешь советы. cool.gif

Спустя 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)
Цитата (Гость_Андрей @ 25.08.2012 - 05:06)
Вот собственно и вопрос, Каким теперь образом получить количество полей в запросе выборки?

Ты уже получил их в $result, нужно извлечь нужные данные с помощью mysqli_result::fetch_assoc или mysqli_result::fetch_row
тыц

Ну то что результат у меня в $result это и дураку понятно rolleyes.gif
Почему 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)
Цитата (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 столбец. Делай выводы.

Тут все такие дают советы? Что никто не может дать конкретно, ответ, без делай выводы и так далее ))

Зачем вы мне пишите

$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 не подойдет, тк оно получает число рядов в результирующей выборке. В данном случае будет один.
Делай так:
$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`");
$row = $result->fetch_row();
echo $row[0];

Ага, ясненько, ну этот вариант я рассматривал, но в таком случае получается не очень красиво и придется делать так:

$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) Гость_Андрей написал(а):
Если я напишу так:

$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)
Цитата
тогда каким образом используя $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

Ага, вот как!? Теперь понятненько, спасибочки тебе 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)
Цитата
Раньше в старом методе такого не было, можешь объяснить для чего это делается? И я смотрю что в самом классе нет метода close(). Тогда как? Ведь теперь $result это объект класса mysqli_result.

Методом mysqli_result::close освобождается память, связанная с результатом

Я так и предполагал, но не был уверен smile.gif Спасибо!

Тогда вот это все просто синонимы друг друга?

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 Спасибо тебе огромное, ты мне очень помог, а то несколько дней сидел и не мог в этом разобраться smile.gif Ты очень хорошо объясняешь, еще раз Спасибо тебе smile.gif

Все тема закрыта!

Спустя 3 часа, 29 минут, 55 секунд (26.08.2012 - 14:11) alexbel2404 написал(а):
Intval то зачем? Или ты боишься, что вернется float? Такого не бывает
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.