Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверьте функции, может что подправить? несколько основных функций для удобства 
:(
    Опции темы
slang
Дата 6.2.2007, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: 1
Всего: 0



Набросал несколько функций для удобного (на мой, конечно, взгляд) обращения к базе MySQL, посмотрите, может чего изменить следует?
Догадываюсь, что существует множество подобных вещей, но в чужом разбираться как то опыт не позволяет smile
Код

/*******************************************
Функции для работы с базой данных
********************************************/
// Стандартные функции
/************************************************************/
// Подключение к базе данных
function dbConnect($hostMySQL,$userMySQL,$passMySQL,$baseMySQL)    {
    /* Описание:
    открывает подключение к MySQL и выбирает базу данных
    функция возвращает идентификатор ссылки MySQL при успехе, FALSE при неудаче
    входящие параметры:
    - $hostMySQL - адрес сервера, например "localhost"
    - $userMySQL - пользователь базы данных
    - $userMySQL - пароль пользователя базы данных
    - $baseMySQL - база данных к которой производится подключение
    */
    $link = mysql_connect($hostMySQL, $userMySQL, $passMySQL);
     if( !$link )   // Если соединиться не удалось:
      {
       // Если соединение не удалось пишем ошибку и возвращаем FALSE.
       // print "<BR>" . mysql_error() ;
       return false;
      }
if( ! mysql_select_db( $baseMySQL ) )  // Если нет такой БД
{
    // Если выбрать базу не удалось пишем ошибку и возвращаем FALSE.
    // print "<BR>" . mysql_error() ;
    return false;
    }
    return $link;
}
/****************************************************************/
//    Запрос к базе данных
function DbQuery($sql)    {
    /* Описание
    выполняет запрос к базе данных
    для операторов SELECT, SHOW, EXPLAIN или DESCRIBE функция возвращает идентификатор ресурса,
    FALSE если запрос не был выполнен корректно.
    Для других типов SQL-операторов mysql_query() возвращает TRUE при успехе, FALSE при ошибке
    входящие параметры:
    - $sql - SQL запрос к базе данных
    */
    If ($result = mysql_query($sql))    {
        return $result;
    }
    else    {
        //print "<BR>" . mysql_error() ;
        return false;
    }
}

/*****************************************************************/
//    Добавление записей в таблицы
function RecordDbAdd($table, $col, $val)    {
    /* Описание
    добавлеяет запись в таблицу
    возвращает значение ключевого поля добавленной записи или FALSE, если добавление не удалось
    входящие параметры:
    - $table - таблица в которую производится добавление записи
    - $col - массив имен полей, в которые следует вносить данные
    - $val - массив значений полей, указанных выше в массиве $col
    Если запись происходит в текстовое поле, этот элемент (его значение) должно быть предварительно выделено знаками "'"
    */
    $sql = "INSERT INTO `" . $table . "` (";
    for ($i = 0; $i < count($col)-1; $i++)    {
        $sql .= "`" . $col[$i] . "`, ";
    }
    $sql .= "`" . $col[$i] . "`)";
    $sql .= " VALUES (";
    for ($i = 0; $i < count($col)-1; $i++)    {
        $sql .= $val[$i] . ", ";
    }
    $sql .= $val[$i] . ")";
    //print "<BR>$sql";
    If (mysql_query($sql))    {
        return mysql_insert_id();
    }
    else    {
        //print "<BR>" . mysql_error() ;
        return false;
    }
}

/******************************************************************/
//    Удаление записей из таблицы
function RecordDbDel($table, $id, $nid = "id")    {
    /* Описание
    удаляет запись из таблицы
    возвращает TRUE при успешном удалении записи или FALSE, если удаление не удалось
    входящие параметры:
    - $table - таблица в которую производится добавление записи
    - $id - значение поля (по умолчанию id) по которому идентифицируется запись, которую следует удалить
    - $nid - наименование ключевого поля, если отсутствует, то используется id
    */
    $sql = "DELETE FROM `" . mysql_escape_string($table) . "` WHERE " . $nid . "=" . mysql_escape_string($id);
    If ($result = mysql_query($sql))    {
        return true;
    }
    else    {
        print "<BR>" . mysql_error() ;
        return false;
    }
}

/*****************************************************************/
//    Обновление записей в таблице
function RecordDbUpdate($table, $col, $val, $id, $nid = "id")    {
    /* Описание
    обновляет запись в таблице
    возвращает TRUE при успешном обновлении записи или FALSE, если обновление не удалось
    входящие параметры:
    - $table - таблица в которой производится обновление записи
    - $id - значение поля (по умолчанию id) по которому идентифицируется запись, которую следует обновить
    - $col - массив идентификаторов полей записи
    - $val - массив значений полей, указанных выше в массиве $col
    - $nid - наименование ключевого поля, если отсутствует, то используется id
*/
    $sql = "UPDATE `" . $table . "` SET ";
    for ($i = 0; $i < count($col)-1; $i++)    {
        $sql .= "`" . $col[$i] . "` = " . $val[$i] . ", ";
    }
    $sql .= "`" . $col[$i] . "` = " . $val[$i];
    $sql .= " WHERE " . $nid . "=" . $id;
    //print "<BR>$sql";
    If ($result = mysql_query($sql))    {
        return true;
    }
    else    {
        print "<BR>" . mysql_error() ;
        return false;
    }
}


Добавлено @ 09:01 
Исправил функции удаления и обновления что бы в качестве значений идентификатора можно было использовать массив значений
Код

/******************************************************************/
//    Удаление записей из таблицы
function RecordDbDel($table, $id, $nid = "id")    {
    /* Описание
    удаляет запись из таблицы
    возвращает TRUE при успешном удалении записи или FALSE, если удаление не удалось
    входящие параметры:
    - $table - таблица в которую производится добавление записи
    - $id - значение поля (по умолчанию id) по которому идентифицируется запись, которую следует удалить
        может быть массивом значений для удаления нескольких записей
    - $nid - наименование ключевого поля, если отсутствует, то используется id
    */
    if (gettype($id) !== "array")    {
        $sql = "DELETE FROM `" . mysql_escape_string($table) . "` WHERE " . $nid . "=" . mysql_escape_string($id);
        If ($result = mysql_query($sql))    {
            return true;
        }
        else    {
            print "<BR>" . mysql_error() ;
            return false;
        }
    }
    else {
        foreach ($id as $k=>$v)    {
            $sql = "DELETE FROM `" . mysql_escape_string($table) . "` WHERE " . $nid . "=" . mysql_escape_string($v);
            If ($result = mysql_query($sql))    {
                return true;
            }
            else    {
                print "<BR>" . mysql_error() ;
                return false;
            }
        }    
    }
}

/*****************************************************************/
//    Обновление записей в таблице
function RecordDbUpdate($table, $col, $val, $id, $nid = "id")    {
    /* Описание
    обновляет запись в таблице
    возвращает TRUE при успешном обновлении записи или FALSE, если обновление не удалось
    входящие параметры:
    - $table - таблица в которой производится обновление записи
    - $id - значение поля (по умолчанию id) по которому идентифицируется запись, которую следует обновить
            может быть массивом значений для удаления нескольких записей
    - $col - массив идентификаторов полей записи
    - $val - массив значений полей, указанных выше в массиве $col
    - $nid - наименование ключевого поля, если отсутствует, то используется id
*/
    if (gettype($id) !== "array")    {
        $sql = "UPDATE `" . $table . "` SET ";
        for ($i = 0; $i < count($col)-1; $i++)    {
            $sql .= "`" . $col[$i] . "` = " . $val[$i] . ", ";
        }
        $sql .= "`" . $col[$i] . "` = " . $val[$i];
        $sql .= " WHERE " . $nid . "=" . $id;
        //print "<BR>$sql";
        If ($result = mysql_query($sql))    {
            return true;
        }
        else    {
            print "<BR>" . mysql_error() ;
            return false;
        }
    }
    else    {
        foreach ($id as $k=>$v)    {
            $sql = "UPDATE `" . $table . "` SET ";
            for ($i = 0; $i < count($col)-1; $i++)    {
                $sql .= "`" . $col[$i] . "` = " . $val[$i] . ", ";
            }
            $sql .= "`" . $col[$i] . "` = " . $val[$i];
            $sql .= " WHERE " . $nid . "=" . $v;
            //print "<BR>$sql";
            If ($result = mysql_query($sql))    {
                return true;
            }
            else    {
                print "<BR>" . mysql_error() ;
                return false;
            }            
        }
    }
}


Это сообщение отредактировал(а) slang - 6.2.2007, 09:02


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
slang
Дата 6.2.2007, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: 1
Всего: 0



и еще одна функция:
Код

/**********************************************************************/
// Возвращает количество записей, соответствующих условию в таблице
function RecordDbCount($table, $pole = "", $value = "")    {
    /* Описание
    возвращает количество записей, соответствующее условию
    входящие параметры:
    - $table - таблица в которой производится проверка записей
    - $pole - наименование поля по которому идет поиск, если отсутствует, то функция вернет общее количество записей в таблице
    - $value - значение поля $pole, которое необходимо отобрать
*/
    if (strlen($pole) > 0)    {
        if (!$result = mysql_query("SELECT * FROM " . $table . " WHERE " . $pole . "=" . $value))    {
            return 0;
        }
    }
    else    {
        if (!$result = mysql_query("SELECT * FROM " . $table))    {
            return 0;
        }
    }
    $num_rows = mysql_num_rows($result);
    return $num_rows;
}


Это сообщение отредактировал(а) slang - 6.2.2007, 10:16


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
Всемогущий
Дата 6.2.2007, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 2
Всего: 13



глядишь так и новый PEAR выйдет smile 


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
mishaSL
Дата 6.2.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 7
Всего: 54



Если окончательно решил писать сам, то тогда объедени это все вкласс хотя бы.

И несколько замечаний по твоим функциям:
1. Функция удаления (обновленная) при передаче массива делай один запрос к базе, а не в цикле.
2. Функция RecordDbCount бредовая, для этого есть SQL функция COUNT()


P.S. Для чего тебе это надо??? PDO не хочешь использовать?


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Vaulter
Дата 6.2.2007, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 3
Всего: 22



есть PDO, есть PEAR:MDB2



--------------------
PM MAIL WWW ICQ   Вверх
slang
Дата 7.2.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: 1
Всего: 0



mishaSL, спасибо.
с конца:
по RecordDbCount() - подправил, хотя разницы особой в объеме кода не заметил, но видимо так легче по использованию памяти будет?
Код

/**********************************************************************/
// Возвращает количество записей, соответствующих условию в таблице
function RecordDbCount($table, $pole = "", $value = "")    {
    /* Описание
    возвращает количество записей, соответствующее условию. если произошла ошибка, 
        то возвращает FALSE, если нет записей, соответствующих условию - то 0
    входящие параметры:
    - $table - таблица в которой производится проверка записей
    - $pole - наименование поля по которому идет поиск, если отсутствует, то функция вернет общее количество записей в таблице
    - $value - значение поля $pole, которое необходимо отобрать
    */
    if (strlen($pole) > 0)    {
        if (!$result = mysql_query("SELECT COUNT(*) FROM " . $table . " WHERE " . $pole . "=" . $value))    {
            return false;
        }
    }
    else    {
        if (!$result = mysql_query("SELECT COUNT(*) FROM " . $table))    {
            return false;
        }
    }
    $num_rows = mysql_fetch_array($result);
    return $num_rows[0];
}

обновление записи:
Код

/*****************************************************************/
//    Обновление записей в таблице
function RecordDbUpdate($table, $col, $val, $id, $nid = "id")    {
    /* Описание
    обновляет запись в таблице
    возвращает TRUE при успешном обновлении записи или FALSE, если обновление не удалось
    входящие параметры:
    - $table - таблица в которой производится обновление записи
    - $id - значение поля (по умолчанию id) по которому идентифицируется запись, которую следует обновить
            может быть массивом значений для удаления нескольких записей
    - $col - массив идентификаторов полей записи
    - $val - массив значений полей, указанных выше в массиве $col
    - $nid - наименование ключевого поля, если отсутствует, то используется id
    */
    if (gettype($id) !== "array")    {
        $sql = "UPDATE `" . $table . "` SET ";
        for ($i = 0; $i < count($col)-1; $i++)    {
            $sql .= "`" . $col[$i] . "` = " . $val[$i] . ", ";
        }
        $sql .= "`" . $col[$i] . "` = " . $val[$i];
        $sql .= " WHERE " . $nid . "=" . $id;
        //print "<BR>$sql";
        If ($result = mysql_query($sql))    {
            return true;
        }
        else    {
            //print "<BR>" . mysql_error() ;
            return false;
        }
    }
    else    {
            $sql = "UPDATE `" . $table . "` SET ";
            for ($i = 0; $i < count($col)-1; $i++)    {
                $sql .= "`" . $col[$i] . "` = " . $val[$i] . ", ";
            }
            $sql .= "`" . $col[$i] . "` = " . $val[$i];
            $sql .= " WHERE ";
                for ($i = 0; $i < count($id) - 1; $i++)    {
                    $sql .= $nid . "=" . $v . " OR ";
                }
                $sql .= $nid . "=" . $v;
            //print "<BR>$sql";
            If ($result = mysql_query($sql))    {
                return true;
            }
            else    {
                //print "<BR>" . mysql_error() ;
                return false;
            }
    }
}

по поводу объединения в класс - я не понимаю смысла классов в принципе  smile 
если я все это объединю в класс, то мне сначала нужно будет создавать объект этого класса - лишняя строчка, а что мне даст объединение нескольких функций в класс?
через пол года с трудом разбираюсь с тем что сам-то написал, а чужой код для меня вообще темный лес.


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
mishaSL
Дата 7.2.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 7
Всего: 54



Цитата(slang @  7.2.2007,  09:28 Найти цитируемый пост)
через пол года с трудом разбираюсь с тем что сам-то написал



Если ты вообще не пользуешься классами, то можешь оставить и эти функции. Через пол года откроешь этот код и скажешь: "Как я мог программировать не ООП?" smile  smile  smile 


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Opik
Дата 8.2.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



Ещё есть mysqli, тоже удобная штука.
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.