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->_pdoType, PDO::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_PREPARES, TRUE);
$this->_connection->setAttribute(PDO::ATTR_ERRMODE, PDO::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 :)