доступ к выборке

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
pix_l
phpBB 1.0.0
Сообщения: 7
Стаж: 14 лет 7 месяцев
Благодарил (а): 3 раза

доступ к выборке

Сообщение pix_l »

Добрый вечер.
Сорри, за глупый вопрос, но как получить сабж? Т.е. делаю

Код: Выделить всё

$sql = "select somefield from phpbb_users where firstfield=0 and secondfield<>''";
$db->sql_query($sql);
А дальше как? Т.е. если произошла выборка все это удовольствие должно в массив какой то влиться. Как это реализуется в phpbb?
Аватара пользователя
HAMMER663
Former team member
Сообщения: 2032
Стаж: 16 лет 5 месяцев
Откуда: Зеленоград
Благодарил (а): 77 раз
Поблагодарили: 249 раз

Re: доступ к выборке

Сообщение HAMMER663 »

Код: Выделить всё

$sql = 'SELECT somefield FROM ' . USERS_TABLE . ' WHERE firstfield=0';
$result = $db->sql_query($sql);

while ($data = $db->sql_fetchrow($result))
{				
	echo $data['somefield']. '<br />';
}
$db->sql_freeresult($result);
pix_l
phpBB 1.0.0
Сообщения: 7
Стаж: 14 лет 7 месяцев
Благодарил (а): 3 раза

Re: доступ к выборке

Сообщение pix_l »

что то я торможу. а как можно проверить есть ли вообще результаты выборки? может ответ пустой вернулся, тогда и код в холостую гонять не зачем
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: доступ к выборке

Сообщение Sheer »

HAMMER663 писал(а):while ($data = $db->sql_fetchrow($result))
если результата не будет, то то, что в скобках будет falsе и цикл не будет выполняться.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
pix_l
phpBB 1.0.0
Сообщения: 7
Стаж: 14 лет 7 месяцев
Благодарил (а): 3 раза

Re: доступ к выборке

Сообщение pix_l »

это не подходит. в цикле у меня заполняется массив, а за циклом запускается другой для апдейта полей со значениями из предыдущего массива. поэтому скорее всего нужно отловить возвращаемое количество строк и если больше нуля, тогда и запускать ветку циклов. как это отловить в phpbb?
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Стаж: 16 лет 10 месяцев
Благодарил (а): 42 раза
Поблагодарили: 506 раз

Re: доступ к выборке

Сообщение Pazh »

Код: Выделить всё

$sql = 'SELECT somefield FROM ' . USERS_TABLE . ' WHERE firstfield=0';
$result = $db->sql_query($sql);

array1 = array2 = array();

while ($data = $db->sql_fetchrow($result))
{				
	array1[] = $data['somefield'];
}
$db->sql_freeresult($result);

if(isset(array1))  // или можно написать if(sizeof(array1))
{
	foreach(array1 as $key => $value)
	{
		array2[]=$value;
	}
}

unset(array1); //удаляем первый массив
Помощь в ЛС/email только за WM или ЮMoney
pix_l
phpBB 1.0.0
Сообщения: 7
Стаж: 14 лет 7 месяцев
Благодарил (а): 3 раза

Re: доступ к выборке

Сообщение pix_l »

я перед вайлом поставил

Код: Выделить всё

if ($db->sql_numrows($result)>0) 
сейчас тестирую
не работает.
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Стаж: 16 лет 10 месяцев
Благодарил (а): 42 раза
Поблагодарили: 506 раз

Re: доступ к выборке

Сообщение Pazh »

все функции класса db описаны в файле /includes/db/dbal.php
Не стоит пытаться изобрести велосипед... Как решить Вашу хотелку описано в предыдущем сообщении
Помощь в ЛС/email только за WM или ЮMoney
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: доступ к выборке

Сообщение Sheer »

pix_l писал(а): поэтому скорее всего
Скорее всего неудачный алгоритм. А подсчитать кол-во строк несложно.

Код: Выделить всё

$row_count=0;
while(...)
{
  $row_coun++;
}
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
pix_l
phpBB 1.0.0
Сообщения: 7
Стаж: 14 лет 7 месяцев
Благодарил (а): 3 раза

Re: доступ к выборке

Сообщение pix_l »

Pazh писал(а):Как решить Вашу хотелку описано в предыдущем сообщении
ни sizeof, ни isset не дают должного результата. на второй цикл проходит с пустым массивом и крон возвращает мне ошибку из за неверного аргумента в foreach(). Поэтому и приходится изобретать велосипед.

Добавлено спустя 1 час 7 минут 51 секунду:
Sheer писал(а):Скорее всего неудачный алгоритм
а почему неудачный алгоритм? по-моему, единственно верный:

Код: Выделить всё

$bls = array();
$sql = "SELECT pixel FROM " . USERS_TABLE . " WHERE sender=0 and pixel<>''";
$result = $db->sql_query($sql);
$row_count=0;
while ($data = $db->sql_fetchrow($result))
{
$bls[] +=$data['pixel'];
$row_count++;				
}
$db->sql_freeresult($result);
if ($row_count>0) {
require_once('somepath/somefile.php');
require_once('somepath/anotherfile.php');
$q = somefunction;
foreach($q->somefunction2($bls,TRUE) as $id=>$v) {
if ($v['status']==1) {
$sql = 'update phpbb_users set sender=1 where pixel='.$id;
$db->sql_query($sql);
}
}
}
если есть более элегантное решение - поделитесь.
pix_l
phpBB 1.0.0
Сообщения: 7
Стаж: 14 лет 7 месяцев
Благодарил (а): 3 раза

Re: доступ к выборке

Сообщение pix_l »

Столкнулся с проблемой.
к странице обращаются по такому примеру: http://somesite.ru/success.php?order=745319942
на данной странице такая вот проверка:

Код: Выделить всё

$order=$_GET['order'];
if ($order<>'')
{
$sql = 'update phpbb_users set pixel="'.$order.'" where user_id='.$user->data['user_id'];
$db->sql_query($sql);
}
т.е. просто в поле заносится тот самый ордер.
На стороне хостинга крутится скрипт, который периодически опрашивает таблицу на предмет наличия заполненного поля и если находит такое поле то производит апдейт в этой же таблице.
Похоже что момент обращения к таблице со страницы совпал с моментом обращения к таблице скрипта и в итоге код на странице не отработал (т.е. не занес информация в таблицу). Обнаружил, когда я обновил страницу и данные сели. Подскажите, как можно обойти такую ситуацию?
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: доступ к выборке

Сообщение rxu »

pix_l
Если установлен период запуска скрипта, а еще лучше - записывается время запуска, то поставьте работу вашего кода в зависимость от времени отработки серверного скрипта.
Изображение
pix_l
phpBB 1.0.0
Сообщения: 7
Стаж: 14 лет 7 месяцев
Благодарил (а): 3 раза

Re: доступ к выборке

Сообщение pix_l »

идея хорошая. еще бы пример реализации и цены бы этой идее не было. честно говоря я думал, может есть какая функция, которая бы проверяла "занятость" БД.
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Стаж: 16 лет 10 месяцев
Благодарил (а): 42 раза
Поблагодарили: 506 раз

Re: доступ к выборке

Сообщение Pazh »

pix_l посмотрите как работают штатные задания cron в форуме - там все это есть (в файле functions.php в функции page_footer идет выбор задания для запуска cron-а, в файле function_admin.php все функции начинающиеся на tidy_ и есть сами скрипты заданий)
Помощь в ЛС/email только за WM или ЮMoney
Eugeny1987
phpBB 1.4.1
Сообщения: 43
Стаж: 14 лет 6 месяцев
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: доступ к выборке

Сообщение Eugeny1987 »

Проверить есть ли что-то в выборке можно так

Код: Выделить всё

$sql = 'SELECT somefield FROM ' . USERS_TABLE . ' WHERE firstfield=0';
$result = $db->sql_query($sql);
$resultcount = $result->num_rows;

Вернуться в «Для авторов (phpBB 3.0.x)»