Функция постраничного вывода

Clocker

Guest
Функция постраничного вывода

Дабы не вызывать на нескольких страницах один и тот же код, решил запихнуть его в функцию. Запихнул. Вываливается ошибка в синтаксисе запроса:
PHP:
function pager(&$db, $tbl, $entry, $page, $p_records)
{
  $db->query("SELECT * FROM $tbl");
  $result = $db->FetchArray();

  $all_lines = $db->numRows($result);

  if (!isset($entry) or empty($page) or $entry<=0) $entry=1;
  else $entry=(int)$entry;

  $page_for_query = $entry-1;

  $page_for_query2 = $entry+1;

  $p_start = $page_for_query * $p_records;

  return array($all_lines, $entry, $page_for_query, $page_for_query2,  $p_start);
}
Вызов функции такой:
PHP:
pager(&$db,'_main', $entry, $page, '10');
Ошибка:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1


Если возникнет вопрос откуда $db - это из класса по работе с базой данных.

В чем ошибка запроса?
 

Фанат

oncle terrible
Команда форума
ты хорошо подумал, прежде чем задавать свой вопрос?
 

Clocker

Guest
вместо критики лучше объяснить что не так
 

Фанат

oncle terrible
Команда форума
хорошо, я объясню.
я сижу в своём Брумфилде, в 10 тыщах километров от твоего Орла.
И не имею НИКАКОЙ возможности увидеть твой запрос.
Ты сидишь перед своим компьютером меньше, чем в метре.
И при этом просишь меня, чтобы я тебе ответил, где в твойм запросе ошибка.
Тебе тоже смешно? =)

может быть, ты,всё-таки, сам посмотришь на свой запрос?
 

Clocker

Guest
Запрос на выбор всех строк в функции.

Запрос на извлечение "от и до" :
PHP:
if (!$db->query("SELECT * FROM _main ORDER by id DESC limit ".$p_start." , ".$p_records.";"))
                 {
     die($db->error());
                }
Вывод результатов (навигационная строка):

PHP:
function DisplayNav($all_lines, $p_records, $entry)
     {

     $count_pages = ceil($all_lines / $p_records);
        if ($count_pages>1)
           {
            echo ' <b>'._PAGE_NAV_PAGES.'</b>&nbsp;&nbsp;&nbsp; ';
                 for ($i=1; $i<=$count_pages; $i++)
                     {
                      if($entry==$i and $i!=1)
                         {
                          echo ' <span class="navtext"> [ '.$i.' ] </span>&nbsp; ';
                         }
                          elseif ($entry==$i and $i==1)
                           {
                            echo ' <span class="navtext"> [ 1 ] </span>&nbsp;&nbsp; ';
                           }
                            elseif($i==1 and $entry!=$i)
                             {
                              echo ' <a class="navlink" href="?page=main&entry='.$i.'"> '.$i.' </a>&nbsp; ';
                             }
                              elseif($i!=1 and $entry!=$i)
                                {
                                 echo ' <a class="navlink" href="?page=main&entry='.$i.'"> '.$i.' </a>&nbsp;&nbsp; ';
                                }
                      }
            }
     }
ЧТо еще предоставить?
 

Фанат

oncle terrible
Команда форума
запрос.
запрос, который вызывает вышепроцитированную тобой ошибку.

ты понимаешь, что такое SQL запрос? можешь отличить его от пхп кода?
 

Clocker

Guest
Вот он:
PHP:
$db->query("SELECT * FROM $tbl");
могу написать так:


PHP:
 $query = "SELECT * FROM $tbl";


Я же написал выше, что запрос в функции
 

Фанат

oncle terrible
Команда форума
никогда не встречал в синтаксисе SQL таких вот операторов - $query...

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

Фанат

oncle terrible
Команда форума
запрос.
но я прошу у тебя не вообще запрос, а конкретный запрос.
который вызывает ошибку.
ты понимаешь разницу?
 

Clocker

Guest
Объясняю по порядку:
привожу код постраничного вывода, который работает:
PHP:
$p_records = 6;
$tbl = '_main';

$db->query("SELECT * FROM $tbl");
$result = $db->FetchArray();
$all_lines = $db->numRows($result);

if (!isset($entry) or empty($page) or $entry<=0) $entry=1;
         else $entry=(int)$entry;

$page_for_query = $entry-1;
$page_for_query2 = $entry+1;
$p_start = $page_for_query * $p_records;

if (!$db->query("SELECT id, title, pic, text, link FROM _main ORDER by id DESC limit ".$p_start." , ".$p_records.";"))
                 {
     die($db->error());
                }
while ($row = $db->fetchAssoc())
                                {
...................................
}
DisplayNav($all_lines, $p_records, $entry);
+++++++++++++++++++++++++

Этот код мне нужно сделать в функцию подсчета строк для постраничного вывода:
PHP:
$p_records = 6;
$tbl = '_main';

$db->query("SELECT * FROM $tbl");
$result = $db->FetchArray();
$all_lines = $db->numRows($result);

if (!isset($entry) or empty($page) or $entry<=0) $entry=1;
         else $entry=(int)$entry;

$page_for_query = $entry-1;
$page_for_query2 = $entry+1;
$p_start = $page_for_query * $p_records;
+++++++++++++++++++++++++

У меня получется такая функция:
PHP:
function pager(&$db, $tbl, $entry, $page, $p_records) 
{ 
  $db->query("SELECT * FROM $tbl"); 
  $result = $db->FetchArray(); 

  $all_lines = $db->numRows($result); 

  if (!isset($entry) or empty($page) or $entry<=0) $entry=1; 
  else $entry=(int)$entry; 

  $page_for_query = $entry-1; 

  $page_for_query2 = $entry+1; 

  $p_start = $page_for_query * $p_records; 

  return array($all_lines, $entry, $page_for_query, $page_for_query2,  $p_start); 
}
И конкретный ЗАПРОС в этой функции вызывает ошибку в синтакисе.

Я уже не знаю как объяснить толковее. Что не ясно?
 

Фанат

oncle terrible
Команда форума
запрос.
покажи мне запрос, который вызывает ошибку.

я уже начинаю сомневаться в том, что ты понимаешь мои слова.

я прошу у тебя SQL запрос.
строку, которую может выполнить SQL интерпретатор.
а ты мне вываливаешь вместо него горы пхп кода.
 

SelenIT

IT-лунатик :)
Clocker
1. Ты упорно приводишь код генерации запроса. А ошибку MySQL вызывает результат этого кода. Его-то и надо анализировать.
2. Как ты узнал, что ошибку вызывает именно этот запрос, а не второй (с ненужной ";" в конце вдобавок) ?
3. Запрос на выборку всех строк в этой задаче вообще не нужен.
 

Clocker

Guest
Вот этот конкретный ЗАПРОС и вызывает ошибку
PHP:
SELECT * FROM tbl
Вызывает он ее ИМЕННО В ФУНКЦИИ. Я и привел код вне функции, потому как он РАБОТАЕТ. А В ФУНКЦИИ НЕТ
 

Фанат

oncle terrible
Команда форума
Clocker
тебе не кажется, что врать людям, у которых ты просишь помощи - нехорошо?
 

Clocker

Guest
SelenIT
2. Так у меня в функции нет больше запросов
 

SelenIT

IT-лунатик :)
А базе не пофигу ли, в функции запрос или нет? Или вообще в консоли? Может, кроме местоположения в программе, работающий и ошибочный запрос отличаются еще чем-то?
Нужный запрос, по крайней мере, точно отличается от приведенного...
 

Фанат

oncle terrible
Команда форума
похоже он действительно не понимает.

Clocker.
ты когда-нибудь исполнял запросы в консоли? видел в учебниках?
или всю жизь работал с запросами, как с кусками пхп кода?
 

Фанат

oncle terrible
Команда форума
всё очень просто.
пхп заменяет в строках, обрамлённых двойными кавычками, переменную на её значение.
например, если написать
$a=11;
echo "Мне $a лет";
То пхп выведет не "Мне $a лет", а "Мне 11 лет" - переменная будет замещена своим значением.

то же самое и здесь:
код
$tbl = '_main';
$db->query("SELECT * FROM $tbl");
отправит в базу не
SELECT * FROM $tbl
а
SELECT * FROM _main

и если в этом запросе нет ошибок, а в базе есть таблица _main то этот запрос вернёт результат.

-~{}~ 23.10.05 22:54:

далее.
когда ты пишешь пхп код, ты должен чётко себе представлять, что ты хочешь получить.
к примеру, если ты пишешь
echo "</table>";
то ты должен понимать - что ты выводишь на экран тег </table>, а так же понимать - что он делает и для чего служит.

то же самое и с запросами.
прежде, чем писать код пхп, который выполняет запрос - надо сначала выполнить этот запрос без пхп, чтобы убедиться, что он работает.
а если после помещения в код, запрос не работает, то его надо вывести на экран, и сравнить с тем, что ты исполнял.
понимаешь?
ВЫВЕСТИ и СРАВНИТЬ.
то, то ты посылаешь с тем, что у тебя работало.

именно это я и прошу тебя сделать уже битых два часа.
вывести на экран то, что твой скрипт посылает в базу.
 
Сверху