На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
Модераторы: Serafim, fatalist
  
    > Запрос к БД + РНР , Не отображаются результаты работы запроса!
      Уважаемые ГУРУ РНР!
      Я не великий спец в РНР и посему прошу помощи, необессудьте!
      Дело вот в чем: Есть БД (InterBase), есть запрос, вот он:
      ExpandedWrap disabled
        <?php
        $db = ibase_connect("C:/DB/test.gdb", "sysdba", "masterkey","WIN1251");
        $sql = "SELECT   a.Name, c.note, d.sourcekesr kesr,
                 SUM (((bp.sourcetype + 1) / 2 * d.credit)) outsumma
         
        FROM facialfincaption c
        LEFT       JOIN facialfindetail d    ON (d.recordindex = c.ID)
        LEFT OUTER JOIN facialacc_cls f      ON (f.ID = d.sourcefacialacc_cls)
        LEFT OUTER JOIN facialfinreestr ffr  ON (ffr.ID = c.reestr_ref)
        LEFT OUTER JOIN buhpaymentcls bp     ON (c.buhpaymentcls = bp.ID)
        LEFT OUTER JOIN organizations a      ON (a.ID = f.Org_Ref)
         
        WHERE ((c.reestrdate BETWEEN 20040630 AND 20040630) OR
        ((c.reestrdate IS NULL) AND (c.acceptdate BETWEEN 20040630 AND 20040630)))
         
        GROUP BY a.Name,
                 d.sourcefacialacc_cls,
                 d.sourcekesr,
                 d.progindex,
                 c.sourceaccount,
                 c.note,
                 ffr.reestrnumber,
                 c.reestrdate";
         
        $res = ibase_query($db, $sql);
        $i = 0;
        echo "<table border = 1>";
        echo "<tr>";
        echo "<td>"."<b>Наименование</b>"."</td><td>"."<b>Назначение платежа</b>"."</td><td>"."<b>КЭСР</b>"."</td><td>"."<b>Дата</b>"."</td>\n";
        echo "</tr>";
        while($row = ibase_fetch_object($res))
        {
        $i++;
        echo "<tr>";
        echo "<td>".$Row[Name]."</td><td>".$Row[note]."</td><td>".$Row[kesr]."</td><td>".$Row[outsumma]."</td>\n";
        echo "</tr>";
        }
        ibase_free_result($res);
        ibase_close($db);
        ?>

      НО! Выводятся только заголовки столбцов, а самих данных нет, хотя я точно знаю, что по этому запросу результаты есть (ISQL).
      Что самое обидное, практически аналогичный запрос работает нормально. Вот он:
      ExpandedWrap disabled
        <?php
        $username=$_POST["nameuser"];
        $password=$_POST["password"];
        if (!$nameuser || !$password || !$searchtype || !$searchterm)
          {
             echo "Вы не заполнили одно или несколько полей!.
                  Пожалуйста вернитесь на предидущую страницу и повторите ввод!";
             exit;
          }
         
          $username = addslashes($nameuser);
          $password = addslashes($password);
          $searchtype = addslashes($searchtype);
          $searchterm = addslashes($searchterm);
        //$db = ibase_connect("C:/DB/bases/test2004.gdb", "SYSDBA", "masterkey");
        $db = ibase_connect("C:/DB/test.gdb", $username, $password,"WIN1251");
        $result = ibase_query("SELECT * FROM FACT where ".$searchtype." like '%".$searchterm."%'",$db);
        $i = 0;
        echo "<table border = 1>";
        echo "<tr>";
        echo "<td>"."<b>Сумма</b>"."</td><td>"."<b>Наименование</b>"."</td><td>"."<b>Дата</b>"."</td>\n";
        echo "</tr>";
        while ($Row=ibase_fetch_row($result))
        {
        $i++;
        echo "<tr>";
        echo "<td>".$Row[0]."</td><td>".$Row[4]."</td><td>".$Row[5]."</td>\n";
        $summ=$summ+$Row[0];
        echo "</tr>";
        }
        echo "<tr><td>";
        echo "Сложили: ";
        echo $summ;
        echo "</td><td> </td></tr>";
        echo "</table>";
        echo $i;
        echo "<b>  записей найдено</b>";
        ibase_close($db);
        ?>
      Пробовал менять наименование столбцов на их номера - всё без толку! Башню рвёт уже! Подскажите, плиз, где собака порылась???!!!
        Увы, ответ на этот вопрос в свое время мне так и не подсказали, как не обидно. Но решился он тогда сам по себе. Т.е. с какого-то момента просто всё заработало. Было произведено много манипуляций, после какой конкретно наступилдо счастие, не знаю. Тогда было мало времени для разбора плётов. Есть только предположение, что виновата, всё же кодировка... Раз уж по номеру столбца данные находятся, а по имени нет. Посмотри в конфиге, какая кодировка по умолчанию стоит. Я сейчас даже проверить своё предположение не могу, у меня полигона нет. Если проблема не решится до того момента, как я заведу свою машину, скажу что-нить более конкретное. А пока.. посмотри кодировку....
          Цитата apostol @ 20.09.04, 08:59
          Увы, ответ на этот вопрос в свое время мне так и не подсказали, как не обидно. Но решился он тогда сам по себе. Т.е. с какого-то момента просто всё заработало. Было произведено много манипуляций, после какой конкретно наступилдо счастие, не знаю. Тогда было мало времени для разбора плётов. Есть только предположение, что виновата, всё же кодировка... Раз уж по номеру столбца данные находятся, а по имени нет. Посмотри в конфиге, какая кодировка по умолчанию стоит. Я сейчас даже проверить своё предположение не могу, у меня полигона нет. Если проблема не решится до того момента, как я заведу свою машину, скажу что-нить более конкретное. А пока.. посмотри кодировку....

          Разобрался!
          Если интересно, то работает вот так:
          ExpandedWrap disabled
            $result = ibase_query($db, $sql);
            $i = 0;
            echo "<table border = 1>";
            echo "<tr>";
            echo "<td>"."<b>Наименование</b>"."</td><td>"."<b>Назначение платежа</b>"."</td><td>"."<b>КЭСР</b>"."</td><td>"."<b>Дата</b>"."</td>\n";
            echo "</tr>";
            while($Row = ibase_fetch_row($result))
            {
            $i++;
            echo "<tr>";
            echo "<td>".$Row[0]."</td><td>".$Row[1]."</td><td>".$Row[2]."</td><td>".$Row[3]."</td>\n";
            echo "</tr>";
            }

          А виновата вовсе не кодировка, ибо изначально было:
          ExpandedWrap disabled
             
            $db = ibase_connect("C:/DB/test.gdb", "sysdba", "masterkey","WIN1251");

          А заработало после того, как
          ExpandedWrap disabled
             
            while($row = ibase_fetch_object($result))

          было заменено на
          ExpandedWrap disabled
             
            while($row = ibase_fetch_row($result))

          и
          ExpandedWrap disabled
            $Row[Name]

          Было заменено на
          ExpandedWrap disabled
            $Row[0]
          .
          Может это и каряво, исходя из моего ламерского уровня владения PHP, но ЭТО работает! :D
            Дык, понятно, что это работает, но обращение по имени в поименованном массиве гораздо эстетичнее. Хорошо если у Тебя обращение к паре таблиц, а если таковых многа? Ты ж запутаешься в своих ноликах и единичках... То что нужно делать fetch_row, а не fetch_object, - это Ты совершенно точно подметил, но и обращаться лучше по имени. а не по номеру столбца. Это возможно, но что для этого нужно сделать, я точно пока сказать не могу. Я-то думал, Ты как раз по имени обратиться хочешь...
              Цитата apostol @ 20.09.04, 09:56
              Дык, понятно, что это работает, но обращение по имени в поименованном массиве гораздо эстетичнее. Хорошо если у Тебя обращение к паре таблиц, а если таковых многа? Ты ж запутаешься в своих ноликах и единичках... То что нужно делать fetch_row, а не fetch_object, - это Ты совершенно точно подметил, но и обращаться лучше по имени. а не по номеру столбца. Это возможно, но что для этого нужно сделать, я точно пока сказать не могу. Я-то думал, Ты как раз по имени обратиться хочешь...

              Ты безусловно прав и эстетике необходимо уделять должное внимание, но сейчас главная задача - ЧТОБ РАБОТАЛО! Код же буду вылизывать в процессе, не мешая работе системы.:-)
                А ibase_fetch_assoc($result) не пробовали? Должна вернуть в ассоциативном массиве, то бишь "с именами". И при указании ассоциативного индекса все-таки лучше его заключать в кавычки: $Row['Name'] вместо $Row[Name].
                  Дык, он и так должен, вродь, вернуть в ассоциированном, но mysql_fetch_assoc, результатов не дал, я проверил. Чу позже погляжу, может вспомню, как борол это дело....
                    Цитата
                    apostol, 21.09.04, 14:00
                    Дык, он и так должен, вродь, вернуть в ассоциированном


                    Вроде нет. x_fetch_row - обычный массив, x_fetch_assoc - ассоциативный.
                      Точно, Роман, Ты совершенно прав. Странно, вчера уходил с работы, не работало, сегодня пришёл, _fetch_assoc работает, как надо. Фантом. Очень странно! Спасибо Тебе, rvt. :)
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0338 ]   [ 15 queries used ]   [ Generated: 10.05.24, 10:56 GMT ]