Как правильно переделать под PDO?

Twix007

Гуру форума
Регистрация
11 Окт 2009
Сообщения
257
Реакции
57
Есть код:
Код:
<?php
/* проверка, есть ли запись в MySQL */
/* таблице с таким id или ее нет */
function searchID($id)
{
$result = mysql_query ("SELECT * FROM `pligg_counts` WHERE `page_id` LIKE '".$id."'");
$num_rows = mysql_num_rows($result);
if ($num_rows>0)
{
    return True;
}
else
{
    return False;
}
}
/* Читает запись из MySQL таблицы */
/* возвращает ассоциированный массив */
function MySQLRead($id)
{
$id = addslashes($id);
$result = mysql_query ("SELECT * FROM `pligg_counts` WHERE `page_id` LIKE '".$id."'");
return (array)mysql_fetch_assoc($result);
}
/* Обновление времени для конкретной записи */
function UpdateTime($id, $time)
{
$id = addslashes($id);
$time = addslashes($time);
$result = mysql_query ("UPDATE `pligg_counts` SET `date` = '".$time."' WHERE `page_id` = '".$id."'");
return $result;
}
/* Обновление счетчиков для записи с указанным id */
function UpdateCounders($id, $all, $today)
{
$id = addslashes($id);
$time = addslashes($time);
$result = mysql_query ("UPDATE `pligg_counts` SET `all` = '".$all."',`today` = '".$today."' WHERE `page_id` = '".$id."'");
return $result;
}
/* Запись всех значений "По умолчанию" */
function Default_Write($id)
{
$id = addslashes($id);
$result = mysql_query ("INSERT INTO `pligg_counts` ( `page_id` , `all` , `today` , `date` ) VALUES ('".$id."' , 1 , 1 , '".(time()+60*60*24)."');");
return $result;
}
$unical_page_id_gid = ($_SERVER['REQUEST_URI']); // получение url страницы
$link = mysql_connect($INFO['EZSQL_DB_HOST'], $INFO['EZSQL_DB_USER'], $INFO['EZSQL_DB_PASSWORD']); // Соединение с MySQL
mysql_select_db ($INFO['EZSQL_DB_NAME']); // Выбор базы данных

if (!searchID($unical_page_id_gid)) // существует ли запись с таким id
{
    Default_Write($unical_page_id_gid); // запись всех значений по умолчанию
        define("count", "1");
}
else // если не существует
{
$tmp = MySQLRead($unical_page_id_gid); // считаем значения
$all = $tmp['all'] + 1;
$today = $tmp['today'] +1;
if (time()>=$tmp['date']) // если сутки с момента записи прошли
{
    UpdateTime($unical_page_id_gid, (time()+60*60*24)); // обновим дату
    UpdateCounders($unical_page_id_gid, $all, 1); // обновим счетчики
}
else // если еще нет
{
    /* обновим счетчики */
    UpdateCounders($unical_page_id_gid, $all, $today);
}
/* устанавливаем константу с текущими значениями счетчиков */
define("count", "$all");
}
mysql_close($link); // Разрываем соединение с MySQL
?>
И есть одна из ошибок (// Соединение с MySQL )
Код:
[PHP Deprecated:  mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/www/site.com/counter.php on line 56
Как правильно сделать переход на PDO ?
 
По простому, так:
Код:
<?php

function &db()
{
    global $db;

    return $db;
}

/* проверка, есть ли запись в MySQL */
/* таблице с таким id или ее нет */
function searchID($id)
{
    $result = db()->query ("SELECT * FROM `pligg_counts` WHERE `page_id` LIKE '".$id."'");
    $num_rows = $result->rowCount();
    if ($num_rows>0)
    {
        return True;
    }
    else
    {
        return False;
    }
}
/* Читает запись из MySQL таблицы */
/* возвращает ассоциированный массив */
function MySQLRead($id)
{
    $id = addslashes($id);
    $result = db()->query ("SELECT * FROM `pligg_counts` WHERE `page_id` LIKE '".$id."'");
    return $result->fetch(PDO::FETCH_ASSOC);
}
/* Обновление времени для конкретной записи */
function UpdateTime($id, $time)
{
    $id = addslashes($id);
    $time = addslashes($time);
    $result = $db->exec ("UPDATE `pligg_counts` SET `date` = '".$time."' WHERE `page_id` = '".$id."'");
    return $result;
}
/* Обновление счетчиков для записи с указанным id */
function UpdateCounders($id, $all, $today)
{
    $id = addslashes($id);
    $time = addslashes($time);
    $result = db()->exec ("UPDATE `pligg_counts` SET `all` = '".$all."',`today` = '".$today."' WHERE `page_id` = '".$id."'");
    return $result;
}
/* Запись всех значений "По умолчанию" */
function Default_Write($id)
{
    $id = addslashes($id);
    $result = $db->exec ("INSERT INTO `pligg_counts` ( `page_id` , `all` , `today` , `date` ) VALUES ('".$id."' , 1 , 1 , '".(time()+60*60*24)."');");
    return $result;
}
$unical_page_id_gid = ($_SERVER['REQUEST_URI']); // получение url страницы

try{
    $db = new PDO('mysql:host='.$INFO['EZSQL_DB_HOST'].';dbname='.$INFO['EZSQL_DB_NAME'], $INFO['EZSQL_DB_USER'], $INFO['EZSQL_DB_PASSWORD'] );
    $this->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
}
catch(PDOException $e)
{
    die('Database connecting error: '.$e->getMessage());
}

if (!searchID($unical_page_id_gid)) // существует ли запись с таким id
{
    Default_Write($unical_page_id_gid); // запись всех значений по умолчанию
    define("count", "1");
}
else // если не существует
{
    $tmp = MySQLRead($unical_page_id_gid); // считаем значения
    $all = $tmp['all'] + 1;
    $today = $tmp['today'] +1;
    if (time()>=$tmp['date']) // если сутки с момента записи прошли
    {
        UpdateTime($unical_page_id_gid, (time()+60*60*24)); // обновим дату
        UpdateCounders($unical_page_id_gid, $all, 1); // обновим счетчики
    }
    else // если еще нет
    {
        /* обновим счетчики */
        UpdateCounders($unical_page_id_gid, $all, $today);
    }
    /* устанавливаем константу с текущими значениями счетчиков */
    define("count", "$all");
}
unset $db; // Разрываем соединение с MySQL
?>

А по хорошему надо prepare + execute

db() использовать либо напрямую: db()->method();

Либо, если через переменную, то делать ссылку: $db = &db();

Хотя PHP иногда ругается, что нельзя ссылку делать на функцию. Но это можно проигнорить
 
я бы просто переделал под mysqli, там минимум изменений нужно
 
По простому, так:
Код:
<?php

function &db()
{
    global $db;

    return $db;
}

/* проверка, есть ли запись в MySQL */
/* таблице с таким id или ее нет */
function searchID($id)
{
    $result = db()->query ("SELECT * FROM `pligg_counts` WHERE `page_id` LIKE '".$id."'");
    $num_rows = $result->rowCount();
    if ($num_rows>0)
    {
        return True;
    }
    else
    {
        return False;
    }
}
/* Читает запись из MySQL таблицы */
/* возвращает ассоциированный массив */
function MySQLRead($id)
{
    $id = addslashes($id);
    $result = db()->query ("SELECT * FROM `pligg_counts` WHERE `page_id` LIKE '".$id."'");
    return $result->fetch(PDO::FETCH_ASSOC);
}
/* Обновление времени для конкретной записи */
function UpdateTime($id, $time)
{
    $id = addslashes($id);
    $time = addslashes($time);
    $result = $db->exec ("UPDATE `pligg_counts` SET `date` = '".$time."' WHERE `page_id` = '".$id."'");
    return $result;
}
/* Обновление счетчиков для записи с указанным id */
function UpdateCounders($id, $all, $today)
{
    $id = addslashes($id);
    $time = addslashes($time);
    $result = db()->exec ("UPDATE `pligg_counts` SET `all` = '".$all."',`today` = '".$today."' WHERE `page_id` = '".$id."'");
    return $result;
}
/* Запись всех значений "По умолчанию" */
function Default_Write($id)
{
    $id = addslashes($id);
    $result = $db->exec ("INSERT INTO `pligg_counts` ( `page_id` , `all` , `today` , `date` ) VALUES ('".$id."' , 1 , 1 , '".(time()+60*60*24)."');");
    return $result;
}
$unical_page_id_gid = ($_SERVER['REQUEST_URI']); // получение url страницы

try{
    $db = new PDO('mysql:host='.$INFO['EZSQL_DB_HOST'].';dbname='.$INFO['EZSQL_DB_NAME'], $INFO['EZSQL_DB_USER'], $INFO['EZSQL_DB_PASSWORD'] );
    $this->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
}
catch(PDOException $e)
{
    die('Database connecting error: '.$e->getMessage());
}

if (!searchID($unical_page_id_gid)) // существует ли запись с таким id
{
    Default_Write($unical_page_id_gid); // запись всех значений по умолчанию
    define("count", "1");
}
else // если не существует
{
    $tmp = MySQLRead($unical_page_id_gid); // считаем значения
    $all = $tmp['all'] + 1;
    $today = $tmp['today'] +1;
    if (time()>=$tmp['date']) // если сутки с момента записи прошли
    {
        UpdateTime($unical_page_id_gid, (time()+60*60*24)); // обновим дату
        UpdateCounders($unical_page_id_gid, $all, 1); // обновим счетчики
    }
    else // если еще нет
    {
        /* обновим счетчики */
        UpdateCounders($unical_page_id_gid, $all, $today);
    }
    /* устанавливаем константу с текущими значениями счетчиков */
    define("count", "$all");
}
unset $db; // Разрываем соединение с MySQL
?>

А по хорошему надо prepare + execute

db() использовать либо напрямую: db()->method();

Либо, если через переменную, то делать ссылку: $db = &db();

Хотя PHP иногда ругается, что нельзя ссылку делать на функцию. Но это можно проигнорить
Код:
PHP Parse error:  syntax error, unexpected '$db' (T_VARIABLE), expecting '(' in /home/www/site.com/counter.php on line 90

mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/www/site.com/counter.php on line 56
 
Код:
PHP Parse error:  syntax error, unexpected '$db' (T_VARIABLE), expecting '(' in /home/www/site.com/counter.php on line 90

mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/www/site.com/counter.php on line 56
Так у вас mysql или PDO, раз mysql_connect() написано?

Первая ошибка, нет переменной $db. Значит не объявляли... У меня объявлена.
 
Назад
Сверху