Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Написал свой класс по работе с БД! Посмотрите пожалуйста и скажите, где бред )
 
 автор: belkin   (18.03.2012 в 10:14)   письмо автору
 
 

Написал свой класс по работе с бд, пока все нравится и удобный вроде бы, да и в общем очень нравится, правда была проблема с insertom, когда много кода html вводил вроде бы не отправлялось, для этого пришлось сделать такой режим guard :) по умол. он включен и если он вкл., то данные пролазят через htmlspecialchars и mysql_real_escape_string, а если нет, то данные отправляются без проверки.. может подскажите в чем проблема может быть? Или все нормально? Да и в общем можете пожалуйста сказать - им серьезно пользоваться можно?

я его даже прокомментировал!


<?php

    
class Mysql {

        
/**
         * @var bool
         * id подключения к бд
         */
        
public $id false;

        
/**
         * @var bool
         * статус подключения
         */
        
public $status false

        
/**
         * @var string
         * содержит все ошибки, которые могут возникнуть
         */
        
public $error '';

        
/**
         * соединения с бд
         *
         * @param $host
         * адрес сервера MySQL
         * @param $user
         * логин
         * @param $password
         * пароль
         * @param $database
         * название бд
         * @return bool
         * соединилсь - true, иначе false
         */
        
public function connect($host$user$password$database) {
            
            if(
$this->id = @mysql_connect($host$user$password)) {
                
                
$this->status true;
                
            } else {
                
                
$this->error .= '<p>ОШИБКА в функции '.__FUNCTION__.': <b>'.mysql_error().'</b></p>';
                
                return 
false;
                
            }
                
            if(!@
mysql_select_db($database)) {
                
                
$this->status false;
                    
                
$this->error .= '<p>ОШИБКА в функции '.__FUNCTION__.': <b>'.mysql_error().'</b></p>';
                
                return 
false;
                
            }
            
            return 
true;
            
        }

        
/**
         * установка кодировки работы с бл
         *
         * @param $charset
         * кодировка соединения с бд
         * @return bool
         * успешно - true, иначе false
         */
        
public function charset($charset) {
            
            if(
$this->status == false) {
                
                return 
false;
                
            }
                
            
mysql_query("SET character_set_client='".$charset."'"); 
            
            
mysql_query("SET character_set_results='".$charset."'"); 
            
            
mysql_query("SET collation_connection='".$charset."_general_ci'"); 
            
        }

        
/**
         * вставка данных
         *
         * @param $table
         * название таблицы
         * @param array $column
         * массив названий колонок
         * @param array $values
         * массив значений
         * @param bool $guard
         * безопасный режим, включен - true, иначе false
         * @return bool
         * успеная отправка true, иначе false
         */
        
public function insert($table$column = array(), $values = array(), $guard true) {
            
            if(
$this->status == false) {
                
                return 
false;
                
            }
            
            for(
$i=0;$i<count($column);$i++) {
                
                
$column[$i] = '`'.$column[$i].'`';
                
            }    

            for(
$i=0;$i<count($values);$i++) {
                
                if(
$guard) {
                    
                    
$values[$i] = mysql_real_escape_string(htmlspecialchars($values[$i], ENT_QUOTES));
                    
                }

                if(empty(
$values[$i])) {
                    
                    
$values[$i] = 'null';
                    
                } else {
                    
                    
$values[$i] = '\''.$values[$i].'\'';
                    
                }
                
            }   

            
$column implode(", "$column);
                
            
$values implode(", "$values); 

            
$sql mysql_query("INSERT INTO `".$table."` (".$column.") VALUES (".$values.")");

            if(!
$sql) {
                
                
$this->error .= '<p>ОШИБКА в функции '.__FUNCTION__.': <b>'.mysql_error().'</b></p>';
                
                return 
false;
                
            }
            
        }

        
/**
         * получение массива всех даных по таблице
         *
         * @param $table
         * название таблицы
         * @return array|bool
         * успешно - true, иначе false
         */
        
public function get($table) {
            
            if(
$this->status == false) {
                
                return 
false;
                
            }
            
            
$sql mysql_query("SELECT * FROM `".$table."`");
            
            if(!
$sql) {
                
                
$this->error .= '<p>ОШИБКА в функции '.__FUNCTION__.': <b>'.mysql_error().'</b></p>';
                
                return 
false;
                
            }
            
            while(
$row mysql_fetch_array($sqlMYSQL_BOTH)) { 
                
                
$res[] = $row;
                
            }
            
            return 
$res;
            
        }

        
/**
         * получение массива данных по колонке
         *
         * @param $table
         * название таблицы
         * @param $column
         * название колонки
         * @return array|bool
         * успешно - true, иначе false
         */
        
public function get_column($table$column) {

            if(
$this->status == false) {

                return 
false;

            }
            
            
$sql mysql_query("SELECT * FROM `".$table."`");
            
            if(!
$sql) {
                
                
$this->error .= '<p>ОШИБКА в функции '.__FUNCTION__.': <b>'.mysql_error().'</b></p>';
                
                return 
false;
                
            }
            
            while(
$row mysql_fetch_array($sqlMYSQL_BOTH)) { 
                
                
$res[] = $row[$column];
                
            }
            
            return 
$res;
            
        }

        
/**
         * получение массива данных
         *
         * @param $table
         * название таблицы
         * @param $data
         * название значение, которое требуется проверить
         * @param $column
         * название колонки, с которой сверяем
         * @param $value
         * название значения, с которым сверяем
         * @return bool
         * успешно - true, иначе false
         */
        
public function count($table$data$column$value) {
            
            if(
$this->status == false) {
                
                return 
false;
                
            }
            
            
$sql mysql_query("SELECT `".$data."` FROM `".$table."` WHERE ".$column." = '".$value."'");  

            if(!
$sql) {
                
                
$this->error .= '<p>ОШИБКА в функции '.__FUNCTION__.': <b>'.mysql_error().'</b></p>';
                
                return 
false;
                
            }

            if(
mysql_num_rows($sql) > 0) {
    
                return 
true;
                
            } return 
false;

        }

        
/**
         * получение массива данных по определенному значению
         *
         * @param $table
         * название таблицы
         * @param $column
         * название колонки, с которой сверяем
         * @param $value
         * название значения, с которым сверяем
         * @return array|bool
         * успешно - true, иначе false
         */
        
public function get_once($table$column$value) {
            
            if(
$this->status == false) {
                
                return 
false;
                
            }
            
            
$sql mysql_query("SELECT * FROM `".$table."` WHERE ".$column." = '".$value."'");
            
            if(!
$sql) {
                
                
$this->error .= '<p>ОШИБКА в функции '.__FUNCTION__.': <b>'.mysql_error().'</b></p>';
                
                return 
false;
                
            }
            
            while(
$row mysql_fetch_array($sqlMYSQL_BOTH)) { 
                
                return 
$row;
                
            }                  
            
        }

        
/**
         * обновление данных по колонке и значению
         *
         * @param $table
         * название таблицы
         * @param $setColumn
         * название колонки, которой присваиваем новое значение
         * @param $setValue
         * название значение, которое присваиваем
         * @param $column
         * название колонки, с которой сверяем
         * @param $value
         * название значения, с которым сверяем
         * @param bool $guard
         * безопасный режим, включен - true, иначе false
         * @return bool
         * успешно - true, иначе false
         */
        
public function update($table$setColumn$setValue$column$value$guard true) {
            
            if(
$this->status == false) {
                
                return 
false;
                
            }
            
            if(
$guard) {
                
                
$setValue mysql_real_escape_string(htmlspecialchars($setValueENT_QUOTES));
                
            }

            if(
$column == 'id') {
                
                
$sql mysql_query("UPDATE `".$table."` SET `".$setColumn."` = '".$setValue."' WHERE ".$column." = '".intval($value)."'");
                
                
            } else {
                
                
$sql mysql_query("UPDATE `".$table."` SET `".$setColumn."` = '".$setValue."' WHERE ".$column." = '".$value."'");
                
            }
           
// $this->debug("UPDATE `".$table."` SET `".$setColumn."` = '".$setValue."' WHERE ".$column." = '".$value."'");
            
if(!$sql) {
                
                
$this->error .= '<p>ОШИБКА в функции '.__FUNCTION__.': <b>'.mysql_error().'</b></p>';
                
                return 
false;
                
            }
            
        }

        
/**
         * удаление данных по колонке и значению
         *
         * @param $table
         * название таблицы
         * @param $column
         * название колонки, с которой сверяем
         * @param $value
         * название значения, с которым сверяем
         * @return bool
         * успешно - true, иначе false
         */
        
public function delete($table$column$value) {
            
            if(
$this->status == false) {
                
                return 
false;
                
            }
            
            if(
$column == 'id') {
                
                
$sql mysql_query("DELETE FROM `".$table."` WHERE `".$column."` = ".intval($value)."");
                
                
            } else {
                
                
$sql mysql_query("DELETE FROM `".$table."` WHERE `".$column."` = ".$value."");
                
            }

            if(!
$sql) {
                
                
$this->error .= '<p>ОШИБКА в функции '.__FUNCTION__.': <b>'.mysql_error().'</b></p>';
                
                return 
false;
                
            }
            
        }

        
/**
         * закрывает соединения по по его id
         *
         * @param null $id
         * id соединения
         */
        
public function close($id null) {
            
            
$this->status false;

            if(
$id) {

                
$id $this->id;

            }

            
mysql_close($id);

        } 

        
/**
         * ф-ция для отладки
         * 
         * @param $obj
         * имя переменной, массива и т.д.
         * @param bool $param
         * true - pritn_r();, false - var_dump();
         */
        
public function debug($obj$param true) {
            
            echo(
"<pre style='padding: 30px;overflow:visible;z-index:9999;position:relative;background:#fff;color:000;'>\n\n\n");
            
            if(
$param) {
                
                
print_r($obj);
                
            } else {
                
                
var_dump($obj);
                                
            }
            
            echo(
"\n\n\n</pre>");
            
        }     

    }

    
$mysql = new Mysql();

?>

  Ответить  
 
 автор: Valick   (18.03.2012 в 10:48)   письмо автору
 
   для: belkin   (18.03.2012 в 10:14)
 

это очередная обертка из "функций", ООП тут и не пахнет
причем вы наглухо убили гибкость SQL жесткими рамками определенных запросов

  Ответить  
 
 автор: Belkin   (18.03.2012 в 16:50)   письмо автору
 
   для: Valick   (18.03.2012 в 10:48)
 

А можете пожалуйста подробней, где именно жесткие рамки? И если не трудно, может есть пример хорошего класса для работы с бд, чтобы я хоть посмотрел, как там устроенно(если не сложно, пожалуйста).

  Ответить  
 
 автор: deimand   (18.03.2012 в 17:44)   письмо автору
 
   для: Belkin   (18.03.2012 в 16:50)
 

>А можете пожалуйста подробней, где именно жесткие рамки?

Как?
взять данные не из одной таблицы а из двух сразу?
удалить из двух или более таблиц?
построить более сложное условие, чем соответствие одного поля?

Писать еще и еще функции?

Может проще запрос не привязывать к функциям, а передавать его в функцию параметром?

Вряд ли это можно назвать правильным примером, по отношению к вашему вопросу, но какой никакой:

<?php

 
class db
 
{
   function 
query($sql$htmlspecialchars true$connect)
   {
     
$resousre mysql_query($sql$connect);
     if (
$resousre)
     {
       if (
is_bool($resousre)) return true;
       
       
$data = array();
       if (
mysql_num_rows($resousre) > 0)
       {
         while (
$row mysql_fetch_assoc($resousre))
         {
           if (
$htmlspecialchars === false
             
$data[] = $row;
           else 
             
$data[] = my_htmlspecialchars($row);
         }
       }
       return 
$data;
     }
     else return 
debug(mysql_error());
   }
   
   public function 
debug($param)
   {
     
   }
 }

 
 
// примеры вызовов
 
$result db::query('SELECT * FROM `table`');
 
 
$result db::query('SELECT * FROM `table`'false);
 
 
$sql 'SELECT * FROM `table`';
 
$result db::query($sqltrue$db_1);

 
 
// функция my_htmlspecialchars
 
function my_htmlspecialchars($data)
 {
   if (
is_array($data)) return array_map('my_htmlspecialchars'$data);
   else return 
htmlspecialchars($data);
 }

?>

  Ответить  
 
 автор: Valick   (18.03.2012 в 21:43)   письмо автору
 
   для: Belkin   (18.03.2012 в 16:50)
 

http://pear.php.net/manual/en/package.database.mdb2.php
там несколько классов, насколько они хороши я не знаю
___
просто чтобы у вас получилось ООП вам нужно понять его принципы и один из них это инкапсуляция
задача класса для работы с базой данных абстрагировать код от какой-то конкретной базы данных и адаптировать запрос под конкретный диалект используемый в подключенной конкретной базе

грубо говоря основному коду по барабану какая БД (MySQL, PostgreSQL или Oracle) подключена, код остается неизменным

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования