Skip to content

Работа с запросами

Ребят, всем привет. Установил новую версию, собираюсь разобраться с тем как выполнять запросы. Нужна помощь...

 

 

В каком скрипте можно покувыряться. Собственно хотел найти php код, где запрос и цикл на вывод либо тем либо постов в теме. Мол в нем попробовать через новые библии выполнить запрос.

 

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

 

К стати пробовал, прописывал "print_r('fff');". Что та не отображает вовсе, а где ошибки если выше классов прописать...

 

Хелп...

Featured Replies

О боже, снова "библии". Либа, сленговое значение библиотеки от английского library это "либа"!

 

Класс работы с БД

/system/Db/Db.php

 

Пример селект запроса

$result = \IPS\Db::i()->select( '*', 'table', array('id=?', $id) )

 

Фетчинг результата

foreach( $result as $row )

  • Author

Подскажи пожалуйста, в новой версии. Где тот цикл что перебирает результаты запроса на выборку постов из бд.

Можно пример запроса и как вывести результат его через print_r(). Не могу понять, как увидеть результат в браузере используя "print_r" чтобы мол тестить. Получается как в слепую...

Edited by Testweb

Где тот цикл что перебирает результаты запроса на выборку постов из бд.

 

Фетчинг результата

foreach( $result as $row )

  • Author

477 строчка в "public function select( $c"

Прописываю "print_r('ffff');", обновляю страницу. Нету результата...

 

По идее должен показать "fff", я так дагадываюсь echo тоже не поможет...

 

Как тестить хоть?

Edited by Testweb

477 строчка в "public function select( $c"

Прописываю "print_r('ffff');", обновляю страницу.

Зачем там прописывать print_r? Смотрите выше как выполнять запросы в IPS4.

Как тестить хоть?

Подключите ядро форума и делайте тесты в отдельном файле.

  • Author

Спс, в этой же теме

 

require_once 'init.php';

\IPS\Db::i()->select('*', 'table', array("ip='{$_SERVER['REMOTE_ADDR']}'"))->first();

 

"Что-то пошло не так. Пожалуйста, попробуйте еще раз."

 

Как узнать, что именно пошло не так?)))

Как узнать, что именно пошло не так?)))

Смотреть логи системы в /uploads/logs/

array("ip='{$_SERVER['REMOTE_ADDR']}'")

В IPS4 есть плейсхолдеры которые предотвращают sql инъекций и избавляют от подобных конструкций.

 

array( "ip=?", $_SERVER['REMOTE_ADDR'] )

  • Author

Что та у меня по-прежнему не пропускает...

 

\IPS\Db::i()->select('*', 'sessions', array( "ip=?", $_SERVER['REMOTE_ADDR']))->first();

 

Быть может дело в таблице? На поле "ip" varchar(250)...

first() возвращает первую строку или выбрасывает исключение в случае пустого результата. Поэтому его надо заключать в блок try catch

 

try
{
   $row = \IPS\Db::i()->select( '*', 'core_sessions', array( "ip_address=?", $_SERVER['REMOTE_ADDR'] ) )->first();
   print_r( $row );
}
catch( \UnderflowException $e )
{
   echo 'Error';
}

Либо использовать iterator_to_array который возвращает результирующий массив - многомерный если колонок больше двух, одномерный если селект содержит только одну колонку.

 

$row = iterator_to_array( \IPS\Db::i()->select( '*', 'core_sessions', array( "ip_address=?", $_SERVER['REMOTE_ADDR'] ) ) );
print_r( $row );

 

И да, посмотрите названия таблиц и полей в бд.

  • Author

В таблице нет подходящей строчки, мне всего навсего нужно узнать имеется ли запись с данным ip или нет. Если нет, записать...

 

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

  • Author

catch не помогает, все записи уникальные, нужно вытащить только один массив одной строчки...

Edited by Testweb

Я не понимаю что значит не помогает, выражайтесь конкретнее. Чтобы поймать исключение используйте try-catch тогда сможете продолжить выполнения скрипта. Пример находится выше. Проверьте свой sql запрос, возможно в нем есть ошибки.

 

В таблице нет подходящей строчки, мне всего навсего нужно узнать имеется ли запись с данным ip или нет.

Для начала посмотрите названия таблицы и ее полей, вы явно не знакомы с ее структурой.

  • Author

Все работает, просто когда нет записи по критерию. Выводится сообщение, это сообщение не улавливает try-catch.

 

Я сейчас пока так сделал

if(!$sl->count()){

 

Не вижу других вариантов...

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.