Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.174.239] |
|
Сообщ.
#1
,
|
|
|
Уважаемые ГУРУ РНР!
Я не великий спец в РНР и посему прошу помощи, необессудьте! Дело вот в чем: Есть БД (InterBase), есть запрос, вот он: <?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). Что самое обидное, практически аналогичный запрос работает нормально. Вот он: <?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); ?> |
Сообщ.
#2
,
|
|
|
Увы, ответ на этот вопрос в свое время мне так и не подсказали, как не обидно. Но решился он тогда сам по себе. Т.е. с какого-то момента просто всё заработало. Было произведено много манипуляций, после какой конкретно наступилдо счастие, не знаю. Тогда было мало времени для разбора плётов. Есть только предположение, что виновата, всё же кодировка... Раз уж по номеру столбца данные находятся, а по имени нет. Посмотри в конфиге, какая кодировка по умолчанию стоит. Я сейчас даже проверить своё предположение не могу, у меня полигона нет. Если проблема не решится до того момента, как я заведу свою машину, скажу что-нить более конкретное. А пока.. посмотри кодировку....
|
Сообщ.
#3
,
|
|
|
Цитата apostol @ 20.09.04, 08:59 Увы, ответ на этот вопрос в свое время мне так и не подсказали, как не обидно. Но решился он тогда сам по себе. Т.е. с какого-то момента просто всё заработало. Было произведено много манипуляций, после какой конкретно наступилдо счастие, не знаю. Тогда было мало времени для разбора плётов. Есть только предположение, что виновата, всё же кодировка... Раз уж по номеру столбца данные находятся, а по имени нет. Посмотри в конфиге, какая кодировка по умолчанию стоит. Я сейчас даже проверить своё предположение не могу, у меня полигона нет. Если проблема не решится до того момента, как я заведу свою машину, скажу что-нить более конкретное. А пока.. посмотри кодировку.... Разобрался! Если интересно, то работает вот так: $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>"; } А виновата вовсе не кодировка, ибо изначально было: $db = ibase_connect("C:/DB/test.gdb", "sysdba", "masterkey","WIN1251"); А заработало после того, как while($row = ibase_fetch_object($result)) было заменено на while($row = ibase_fetch_row($result)) и $Row[Name] Было заменено на $Row[0] Может это и каряво, исходя из моего ламерского уровня владения PHP, но ЭТО работает! |
Сообщ.
#4
,
|
|
|
Дык, понятно, что это работает, но обращение по имени в поименованном массиве гораздо эстетичнее. Хорошо если у Тебя обращение к паре таблиц, а если таковых многа? Ты ж запутаешься в своих ноликах и единичках... То что нужно делать fetch_row, а не fetch_object, - это Ты совершенно точно подметил, но и обращаться лучше по имени. а не по номеру столбца. Это возможно, но что для этого нужно сделать, я точно пока сказать не могу. Я-то думал, Ты как раз по имени обратиться хочешь...
|
Сообщ.
#5
,
|
|
|
Цитата apostol @ 20.09.04, 09:56 Дык, понятно, что это работает, но обращение по имени в поименованном массиве гораздо эстетичнее. Хорошо если у Тебя обращение к паре таблиц, а если таковых многа? Ты ж запутаешься в своих ноликах и единичках... То что нужно делать fetch_row, а не fetch_object, - это Ты совершенно точно подметил, но и обращаться лучше по имени. а не по номеру столбца. Это возможно, но что для этого нужно сделать, я точно пока сказать не могу. Я-то думал, Ты как раз по имени обратиться хочешь... Ты безусловно прав и эстетике необходимо уделять должное внимание, но сейчас главная задача - ЧТОБ РАБОТАЛО! Код же буду вылизывать в процессе, не мешая работе системы.:-) |
Сообщ.
#6
,
|
|
|
А ibase_fetch_assoc($result) не пробовали? Должна вернуть в ассоциативном массиве, то бишь "с именами". И при указании ассоциативного индекса все-таки лучше его заключать в кавычки: $Row['Name'] вместо $Row[Name].
|
Сообщ.
#7
,
|
|
|
Дык, он и так должен, вродь, вернуть в ассоциированном, но mysql_fetch_assoc, результатов не дал, я проверил. Чу позже погляжу, может вспомню, как борол это дело....
|
Сообщ.
#8
,
|
|
|
Цитата apostol, 21.09.04, 14:00 Дык, он и так должен, вродь, вернуть в ассоциированном Вроде нет. x_fetch_row - обычный массив, x_fetch_assoc - ассоциативный. |
Сообщ.
#9
,
|
|
|
Точно, Роман, Ты совершенно прав. Странно, вчера уходил с работы, не работало, сегодня пришёл, _fetch_assoc работает, как надо. Фантом. Очень странно! Спасибо Тебе, rvt.
|