#1 2011.09.22 17:19

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 475
Карма: 3
Профиль Веб-сайт

PDO

Как правильно написать данный код на PDO

Код:

1
2
3
4
5
$online = $db->query("SELECT * FROM `online` WHERE `ip` = '$_SERVER[REMOTE_ADDR]'")->fetch(PDO::FETCH_NUM);
if(!$online[0]) $db->exec("INSERT INTO `online` (`ua`,`ip`,`time`) VALUES ('$_SERVER[HTTP_USER_AGENT]','$_SERVER[REMOTE_ADDR]','$_SERVER[REQUEST_TIME]');");
else $db->exec("UPDATE `online` SET `time` = '$_SERVER[REQUEST_TIME]' WHERE `id` = '$online[0]'");
$online = NULL;
$db->exec("DELETE FROM `online` WHERE '$_SERVER[REQUEST_TIME]' - `time` > 360");

Неактивен

#2 2011.09.22 17:42

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: PDO

для начала нужно хотя бы правильно написать ключи в массивах wink
$_SERVER[REQUEST_TIME] - php тут создаст константу REQUEST_TIME и присвоит ей строку "REQUEST_TIME". круто?

Неактивен

#3 2011.09.22 17:51

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 475
Карма: 3
Профиль Веб-сайт

Re: PDO

А ну да... поленился написать )) а больше вариантов как упростить код нет? Просто если на этом  коде мне разобраться то на остальных соответственно тоже... wink

Неактивен

#4 2011.09.22 17:59

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: PDO

да есть что изменить, конечно. но тут переменные как бы доверенные, поэтому можно на фильтрацию забить. можно еще, например, обернуть это все в транзакцию.

Неактивен

#5 2011.09.22 18:03

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 475
Карма: 3
Профиль Веб-сайт

Re: PDO

т.е. как то так

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
try
{
$dbh -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION );
 
$dbh -> beginTransaction ();
$dbh -> exec ( "insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')" );
$dbh -> exec ( "insert into salarychange (id, amount, changedate) values (23, 50000, NOW())" );
$dbh -> commit ();
}
catch ( Exception $e )
{
$dbh -> rollBack ();
echo "Шеф! Фсё пропало : " . $e -> getMessage ();
}

Неактивен

#6 2011.09.22 18:06

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: PDO

типо того

Неактивен

#7 2011.09.22 18:16

WapStyle
Участник
Откуда: Ирбит
Зарегистрирован: 2008.03.26
Сообщений: 475
Карма: 3
Профиль Веб-сайт

Re: PDO

Вот что получилось

Код:

1
2
3
4
5
6
7
8
9
10
11
$online = $db->query('SELECT * FROM `online` WHERE `ip` = "'.$_SERVER['REMOTE_ADDR'].'"')->fetch(PDO::FETCH_NUM);
$db->beginTransaction();
if($online[0]){
$db->exec('UPDATE `online` SET `time` = "'.$_SERVER['REQUEST_TIME'].'" WHERE `id` = "'.$online[0].'"');
} else {
$zapis = $db->prepare("INSERT INTO `online` (`ua`,`ip`,`time`) VALUES (?,?,?);");
$zapis->execute(array($_SERVER['HTTP_USER_AGENT'],$_SERVER['REMOTE_ADDR'],$_SERVER['REQUEST_TIME']));
}
$db->exec('DELETE FROM `online` WHERE "'.$_SERVER['REQUEST_TIME'].'" - `time` > 360');
$db->commit();
$online = NULL;

Отредактировано WapStyle (2011.09.22 18:31)

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.010 s