Ver Mensaje Individual
  #13 (permalink)  
Antiguo 02/01/2008, 14:36
Avatar de bulter
bulter
 
Fecha de Ingreso: enero-2008
Mensajes: 137
Antigüedad: 17 años
Puntos: 20
Re: Ayuda con mi modelo de objetos

Paragone como dije anteriormente me falta mucho for hacer ;) y no solo inter join si no muchas cosas mas ;) Pero ahora tengo otras cosas por hacer ;)

Cita:
aunque no puedo decir lo misma de los comentarios
Ya supongo

Conexion:

Mysql.php
Código PHP:
<?php
/**
 * dGroup Framework
 *
 * @copyright    Copyright (c) 2007 dGroup Technologies
 * @license      Виж license.txt
 * @version      dGroup_Db_Adapter_Mysql.php 0001 18-12-2007 23:55 (v0.0.1)
 */

/**
 * dGroup_Exception
 */
 
require_once "Exception.php";
 
/**
 * dGroup_Db_Adapter_Pdo_Abstract
 */
 
require_once "Abstract.php";
 
 
/**
 * dGroup_Db_Adapter_Pdo_Abstract
 */
 
require_once "Select.php";
 
 class 
dGroup_Db_Adapter_Pdo_Mysql extends dGroup_Db_Adapter_Pdo_Abstract{
    private 
$_connect;
    public 
$_access;
    
    
/**
     * Тази функция въвежда информация в базата данни.
     * 
     * @param string $into (Таблицата където ще се въвежда)
     * @param  array $values (Колоните в който ще се въвежда и техните стойности)
     * @throws  dGroup_Exception
     * @return int (Броя на засегнатите редове)                    
     */         
    
public function insert($into$values){
        if(!
is_array($values)){
            throw new 
dGroup_Exception("Стойностите за въвеждане и техните полета трябва да бъдат записани в масив");
        }
        
        if(!
is_string($into)){
            throw new 
dGroup_Exception("Името на таблицата трябва да бъде стринг.");
        }
        
        
//Въвеждане в базата данни
        
$result $this->_insert($into$values);
        
        return 
$result;
    }
    
    public function 
select(){
        return new 
dGroup_Db_Adapter_Pdo_Select($this->_connection);
    }
 }
?>
Abstract.php
Código PHP:
<?php
/**
 * dGroup Framework
 *
 * @copyright   Copyright (c) 2007 dGroup Technologies
 * @license     Виж license.txt
 * @Version     dGroup_Db_Adapter_Pdo_Abstract.php 0001 18-12-2007 23:56 (v0.0.1)
 */
 
 
require_once "Exception.php";
 
 abstract class 
dGroup_Db_Adapter_Pdo_Abstract{
    
    
/**
     * Връзка с базата данни
     */
    
public $_connection;
    
    
/**
     * PDO тип.
     */
    
private $_pdoType "mysql";
    
    
/**
     * Заявка към базата данни
     */
    
private $_query;
    
    
/**
     * Задава конфигурацията за влизане в базата данни
     * и прави опит за свързване към нея.
     * 
     * @param array $_config (Потребителско име, парола, хост и името на базата данни.)     
     *           
     */         
    
public function __construct(array $_config = array()){
        
$this->_config $_config;
        
$this->_connect();
    }
    
    
/**
     * Създаване на PDO DSN за адаптера.
     *
     * @param array $_config (Данните за вход към базата данни)      
     * @return string
     */
    
    
private function _dsn(){
        
$dsn $this->_config;
        
        
//Не предаваме потребителското име и парола
        
unset($dsn['username']);
        unset(
$dsn['password']);
        
        foreach (
$dsn as $key => $val) {
            
$dsn[$key] = "$key=$val";
        }
        
        return 
$this->_pdoType ':' implode(';'$dsn);
    }
    
    
/**
     * Създаване на PDO обект и връзка към базата данни.
     *      
     * @param   array $_config (Данните за вход към базата данни)       
     * @throws  dGroup_Exception
     * @return  void
     */
    
    
public function _connect(){
    
        
// Ако вече се е създала връзката няма смисъл да се създава на ново
        
if($this->_connection){
            return;
        }
        
        
//Взимане на dsn
        
$dsn self::_dsn();
        
        
//Проверка дали PDO разширението е заредено
        
if (!extension_loaded('pdo')) {
            throw new 
dGroup_Exception('PDO разширението не е намерено');
        }
        
        
//Проверка дали PDO драйвърът е зареден
        
if (!in_array($this->_pdoTypePDO::getAvailableDrivers())) {
            throw new 
dGroup_Exception($this->_pdoType ' драйверът не е инсталиран.');
        }
        
        
//Опит за връзка с базата данни
        
try {
        
            
$this->_connection = new PDO($dsn$this->_config["username"], $this->_config["password"]);
            
$this->_connection->setAttribute(PDO::ATTR_EMULATE_PREPARESTRUE);
            
$this->_connection->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

        } catch (
PDOException $e) {
        
            throw new 
dGroup_Exception($e->getMessage(), $e);
            
        }
    }
    
    
/**
     * Затваряне на връзка с базата данни
     *
     * @return void
     */
    
    
public function closeConnection(){
        
$this->_connection null;
    }
    
    
/**
     * Въвеждане в базата данни
     * Тази функция разделя масива такаче индекса му става името на полето
     * където ще се въвежда информацията, а неговата стойност ще бъде
     * стойноста която трябва да бъде въведена
     * 
     * @param string $table (Името на таблицата където ще се въвеждат данните)
     * @param array $bind (Имената на полетата и стойностите)                         
     * @return int (Броя на засегнатите редове)
     */              
    
    
public function _insert($table, array $bind){
        if(!
is_array($bind)){
            throw new 
dGroup_Exception("За да въведете информация в базата данни трябва
                                        да запишете имената на полетата и техните стойности
                                        във масив."
);
        }
    
        
$cols = array();
        
$vals = array();
        
        
/**
         * Записваме ключа и неговата стойност в два различни масива
         * който ще представляват полетата и техните стойности.
         * При всяко предаване на стойноста на полета в масива
         * той се филнтрира и му се добавят кавички.
         */                                   
        
foreach($bind as $col => $val){
            
$cols[] = $col;
            
$vals[] = "'".htmlspecialchars(addslashes(trim($val)))."'";
        }
        
        
$this->_query "INSERT INTO "$table' (' implode(', '$cols) . ') '
                                      
'VALUES (' implode(', '$vals) . ')';
        
        
$result $this->query($this->_query);
        return 
$result;
    }
    
    
/**
     * Тази функция подготвя заявката за изпълнение
     * 
     * @param:  string $sql (Заявката към базата данни)         
     * @throws  dGroup_Exception
     * @return  mixed 
     */         
    
    
private function _prepare($sql){
        try {
            
$stmt $this->_connection->prepare($sql);
        } catch (
PDOException $e) {
            throw new 
dGroup_Exception($e->getMessage());
        }
        
        return 
$stmt;
    }
    
    
/**
     * Пращане на заявката към базата данни
     * 
     * @param   string $sql (Заявката към базата данни)   
     * @return  int
     */         
    
    
public function query($sql){
        
$stmt $this->_prepare($sql);
        
$stmt->execute((array)$sql);

        return 
$this->rowCount($stmt);
    }
    
    
/**
     * Тази функция брой колко бров колони са били засегнати при 
     * Добавянето, Триенето или Обновяването на таблицата, от базата данни.
     * 
     * @param dGroup_Statement $stmt
     * @throws  dGroup_Exception
     * @return int (Номера на всички засегнати редове)        
     */         
    
public function rowCount($stmt){
        try {
            return 
$stmt->rowCount();
        } catch (
PDOException $e) {
            throw new 
dGroup_Exception($e->getMessage());
        }
    }
 }
?>

Exception.php
Código PHP:
<?php
/**
 * dGroup Framework
 *
 * @copyright   Copyright (c) 2007 dGroup Technologies
 * @license     Виж license.txt
 * @Version     Exception.php 0001 %Date% %Time% (v0.0.1)
 */
 
class dGroup_Db_Exception extends Exception
{}
?>
Estos dos tan poco estan terminados pero es algo de que podeis aprovechar ;)
Claro no es todo hay un archivo mas con el que trabaja todo el framework en el que estoy trabajando :)

Última edición por bulter; 02/01/2008 a las 14:59