PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Описание: класс для mysql
Поиск в теме | Версия для печати
v.kam
Отправлено: 11 Января, 2013 - 21:55:42
Новичок
Покинул форум
Сообщений всего: 23
Дата рег-ции: Июль 2012
Помог: 0 раз(а)
вот начал писать класс для работы с mysql в небольших проектах.
листинг файла class_mysql.php
PHP:
скопировать код в буфер обмена
<?
class db
{
var $request ;
var $result ;
var $link ;
private function MysqlLogError( $log ) //ведение лога ошибок
{
$file = fopen ( 'MysqlLogError.txt' , 'a' ) ; fwrite ( $file , '------------------------------ ' . date ( "Y-m-d H:i:s" ) . ' ------------------------------' . "\n " . $log . "\n " ) ; }
private function SetConfig( )
{
{
return $this -> config [ 'file' ] ;
}
else
{
$this -> MysqlLogError ( "Can't to open file " . $this -> config [ 'file' ] . " in directory" ) ;
}
}
private function MysqlQuery( )
{
include ( $this -> SetConfig ( ) ) ;
if ( $this -> link = @ mysql_connect ( @ $sql_host , @ $sql_user , @ $sql_pass ) ) {
{
{
}
if ( $this -> result = mysql_query ( $this -> request , $this -> link ) ) {
return ;
}
else
{
}
}
else
{
}
}
else
{
}
}
function MysqlFetchArray( )
{
$this -> MysqlQuery ( ) ;
{
$data [ ] = $row ;
}
return $data ;
}
function MysqlNumRows( )
{
$this -> MysqlQuery ( ) ;
}
function MysqlInsertInto
( $table , $field = array ( ) ) {
$sql = array ( 'field' => null , 'value' => null ) ; foreach ( $field as $key => $value )
{
$sql [ 'field' ] .= $key . ', ' ;
$sql [ 'value' ] .= "'" . $value . "', " ;
}
$this -> request = 'INSERT INTO ' . $table . ' (' . substr ( $sql [ 'field' ] , 0 , - 2 ) . ') VALUE(' . substr ( $sql [ 'value' ] , 0 , - 2 ) . ')' ; $this -> MysqlQuery ( ) ;
}
}
$db = new db;
?>
листинг файла config.php
использование
PHP:
скопировать код в буфер обмена
<?
//подключаем файл
include ( 'class_mysql.php' ) ;
//устанавливаем файл конфигурации, и кодировку
$db -> config = array ( 'file' => 'config.php' , 'charset' => 'utf8' ) ;
//вывод из базы циклом
$db -> request = "SELECT * FROM table_name" ;
foreach ( $db -> MysqlFetchArray ( ) as $key => $value )
{
echo $value [ 'field_name' ] . '<br>' ;
}
//вывод кокичества записей
$db -> request = "SELECT * FROM table_name" ;
echo $db -> MysqlNumRows ( ) ;
//добовление записи
$db -> MysqlInsertInto ( 'table_name' , array ( 'field_name1' => 'value1' ,
'field_name2' => 'value2' ,
'field_name3' => 'value3' ,
) ) ;
?>
как видите пока только четыре основных метода.
нужно добавить обновление записей.
какие будут идеи?
spsu
Отправлено: 11 Января, 2013 - 23:16:14
Частый гость
Покинул форум
Сообщений всего: 176
Дата рег-ции: Нояб. 2012
Помог: 3 раз(а)
Ну и запись ошибки можно заменить на исключения, или хотябы часть которая открывает cfg файл.
Коннектится достаточно в конструкторе.
(Отредактировано автором: 11 Января, 2013 - 23:17:36)
v.kam
Отправлено: 13 Января, 2013 - 11:20:40
Новичок
Покинул форум
Сообщений всего: 23
Дата рег-ции: Июль 2012
Помог: 0 раз(а)
написал метод удаления записи(ей).
PHP:
скопировать код в буфер обмена
public function MysqlDelete
( $table , $where = array ( ) ) {
foreach ( $where as $key => $value )
{
$ar [ ] = "`$key ` = '$value '" ;
}
$this -> request = sprintf ( "DELETE FROM `$table ` WHERE $a " ) ; $this -> MysqlQuery ( ) ;
}
использование
(Отредактировано автором: 13 Января, 2013 - 11:23:32)
esterio
Отправлено: 13 Января, 2013 - 12:27:21
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012
Откуда: Украина, Львов
Помог: 127 раз(а)
И так критика
v.kam пишет: var $config = array();
var $request;
var $result;
var $link;
в php 5 доступны
public, private, protected
Ето уже конкретная бяка)))
во первых если не пройдет коннект то вы так и неувидете ошыбки из за @.
вместо mysql стоит использовать mysqli или PDO - они уже в ООП
И напоследок весь код плох. Учитесь, учитесь и еще раз учитесь
v.kam
Отправлено: 09 Февраля, 2013 - 12:18:02
Новичок
Покинул форум
Сообщений всего: 23
Дата рег-ции: Июль 2012
Помог: 0 раз(а)
Всётаки написал класс под свои нужды.
PHP:
скопировать код в буфер обмена
<?
class ClassMysql
{
var $config = "" ;
var $request = "" ;
var $result = "" ;
var $link = "" ;
var $fetch_array = array ( ) ; var $prefix = "" ;
public function MysqlLogError( $log )
{
$file = fopen ( 'MysqlLogError.txt' , 'a' ) ; fwrite ( $file , '------------------------------ ' . date ( "Y-m-d H:i:s" ) . ' ------------------------------' . "\n " . $log . "\n " ) ; }
function ConfigWrite
( $conf_value = array ( ) ) {
if ( count ( $conf_value ) < 6
) {
$this -> MysqlLogError ( "invalid number of array elements" ) ;
return false ;
}
else
{
$conf_write = "" ;
$conf_var = array ( "host" , "username" , "password" , "dbname" , "charset" , "prefix" ) ; foreach ( $conf_array as $key => $value )
{
$conf_write .= "\$ conf['$key '] = '$value ';\n " ;
}
$config = fopen ( 'config.php' , 'w' ) ; if ( fwrite ( $config , "<?\n $conf_write ?>" ) ) {
return true ;
}
else
{
$this -> MysqlLogError ( "error writing configuration file" ) ;
return false ;
}
}
}
function SetConfig( $config = "" )
{
if ( $config != "" )
{
$this -> config = $config ;
}
{
include ( $this -> config ) ;
$this -> prefix = $conf [ 'prefix' ] ;
if ( $link = mysql_connect ( $conf [ 'host' ] , $conf [ 'username' ] , $conf [ 'password' ] ) ) {
{
{
}
$this -> link = $link ;
}
else
{
return false ;
}
}
else
{
return false ;
}
}
else
{
$this -> MysqlLogError ( "Can't to open file " . $this -> config . " in directory" ) ;
return false ;
}
}
function MysqlPars
( $str = array ( ) ) {
foreach ( $str as $value )
{
{
}
else
{
}
}
return $format_str ;
}
function MysqlQuery( $request = "" )
{
if ( $request != "" )
{
"#\F ROM (.+?)#is" ,
"#\T ABLE (.+?)#is"
) ;
"FROM " . $this -> MysqlPrefix ( "\\ 1" ) ,
"TABLE " . $this -> MysqlPrefix ( "\\ 1" )
) ;
$request = preg_replace ( $str_search , $str_replace , $request ) ; $this -> request = $request ;
}
if ( $this -> result = mysql_query ( $this -> request , $this -> link ) ) {
return $this -> result ;
}
else
{
echo '<p>invalid query</p><textarea style="width: 300px; height: 200px;">' . $this -> request . '</textarea>' ;
return false ;
}
}
function MysqlPrefix( $table )
{
return $this -> prefix . $table ;
}
function MysqlFetchArray( )
{
return $this -> fetch_array ;
}
function MysqlNumRows( )
{
}
function MysqlInsertInto
( $table , $insert = array ( ) ) {
$table = $this -> MysqlPrefix ( $table ) ;
$fvalues = implode ( ", " , $this -> MysqlPars ( $insert ) ) ; $this -> request = sprintf ( "INSERT INTO `$table ` (`$fnames `) VALUES($fvalues )" ) ; $this -> MysqlQuery ( ) ;
}
function MysqlDelete
( $table , $where = array ( ) ) {
$table = $this -> MysqlPrefix ( $table ) ;
$value = $this -> MysqlPars ( $where ) ;
foreach ( $where_array as $key => $value )
{
$str_format [ ] = "`$key ` = $value " ;
}
$str_format = implode ( " AND " , $str_format ) ; $this -> request = sprintf ( "DELETE FROM `$table ` WHERE $str_format " ) ; $this -> MysqlQuery ( ) ;
}
function MysqlUpdate
( $table , $update = array ( ) , $where = array ( ) ) {
$table = $this -> MysqlPrefix ( $table ) ;
$update_value = $this -> MysqlPars ( $update ) ;
foreach ( $update_array as $key => $value )
{
$update_format [ ] = "`$key ` = $value " ;
}
$update_format = $update_format = implode ( ", " , $update_format ) ; if ( $where == null )
{
$where_format = "" ;
}
else
{
$where_value = $this -> MysqlPars ( $where ) ;
foreach ( $where_array as $key => $value )
{
$where_format [ ] = "`$key ` = $value " ;
}
$where_format = ' WHERE ' . implode ( " AND " , $where_format ) ; }
$this -> request = sprintf ( "UPDATE `$table ` SET $update_format $where_format " ) ; $this -> MysqlQuery ( ) ;
}
function MysqlClose( )
{
}
}
$ClassMysql = new ClassMysql( ) ;
?>
использование:
PHP:
скопировать код в буфер обмена
//запись файла конфигурации
$ClassMysql -> ConfigWrite ( array ( 'localhost' , //адрес сервера
'user' , //пользователь
'password' , //пароль
'dbname' , //имя базы
'utf8' , //кодировка
'prefix_' //префикс таблиц
) ) ;
//подключение файла конфигурации и установка соединение
$ClassMysql -> SetConfig ( $root_path . 'config.php' ) ;
//добавление записи
$ClassMysql -> MysqlInsertInto ( 'table_name' , array ( 'field_name1' => 'value1' ,
'field_neme2' => 'value2'
) ) ;
//обновление записи
//второй параметр можно убрать (ну мало ли) ошибок не будет
$ClassMysql -> MysqlUpdate ( 'table_name' ,
'field_name1' => 'value1' ,
'field_neme2' => 'value2'
) ,
'where1' => 'criterion1'
'where2' => 'criterion2'
)
) ;
//удаление записи
$ClassMysql -> MysqlDelete ( 'table_name' , array ( 'where1' => 'criterion1'
'where2' => 'criterion2'
) ) ;
//вывод из базы
$ClassMysql -> MysqlQuery ( "SELECT * FROM table_name" ) ;
while ( $row = $ClassMysql -> MysqlFetchArray ( ) )
{
echo $row [ 'field_name1' ] ;
}
//закрываем сосединение
$ClassMysql -> MysqlClose ( ) ;
(Отредактировано автором: 09 Февраля, 2013 - 12:19:00)
DeepVarvar
Отправлено: 09 Февраля, 2013 - 13:27:24
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008
Откуда: Альфа Центавра
Помог: 353 раз(а)
spsu пишет: define('INSERT_SHAB', "INSERT INTO `%s` (`%s`) VALUES ('%s')"); //Обьявляем шаблон для инсерта
Срочно перенести в сам класс в качестве
const !
esterio пишет: в php 5 доступны public, private, protected
Более того, цэ
var уже депрекейтед.
esterio пишет: Ето уже конкретная бяка)))
во первых если не пройдет коннект то вы так и неувидете ошыбки из за @.
У него нармально в
if завернуто же.
esterio пишет: И напоследок весь код плох. Учитесь, учитесь и еще раз учитесь
Stierus пишет: PDO чем не устраивает?
Дак пусть поковыряет велосипеды. Ато пока не разберешься сам как оно работает, так не поймешь чо с этими пдо и мускулИ делать..
v.kam :
1) С какого перепуга класс БД умеет конфиг?
2) С какого перепуга класс БД умеет логи?
3) Вам уже говорили, я повторю - где public, private, protected?
4) Почему, например, не синглтон, или что-то иное ограничивающее кол-во "экземпляров"?
5)
v.kam пишет: $ClassMysql->MysqlQuery("SELECT * FROM table_name");
while($row = $ClassMysql->MysqlFetchArray())
{
echo $row['field_name1'];
}
Ччего? Инкапсулируйте эту while-гадость внутри вашего класса.
6) Мое любимое:
http://forum.php.su/topic.php?forum=33&topic=793
7) Были времена, я тоже так писал.. Ну почти..
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB