Muchas gracias a ambos por las aclaraciones
Estoy intentando entender toda la clase de pies a cabeza, he añadido nuevos métodos y la estoy "documentando", pero hay algunas funciones que no acabo de entender por completo.
A continuación la clase al completo y un ejemplo de implementación.
class-mysql.php
Código PHP:
Ver original<?php
class DataBase {
private $conexion;
private $resource;
private $sql;
public static $queries;
private static $_singleton;
public static function getInstance($servidor, $user, $password, $db){
// Implementación del patrón SINGLETON para no repetir instancias
self::$_singleton = new DataBase($servidor, $user, $password, $db);
}
return self::$_singleton;
}
private function __construct($servidor, $user, $password, $db){
// Conecta al servidor
}
// Selecciona la base de datos
if (!$db_selected) {
}
$this->queries = 0;
$this->resource = null;
}
public function execute(){
if(!($this->resource = mysql_query($this->sql, $this->conexion))){ return null;
}
}
$this->queries++;
return $this->resource;
}
public function alter(){
if(!($this->resource = mysql_query($this->sql, $this->conexion))){ return false;
}
return true;
}
public function getArrayResult(){
// Devuelve un array asociativo de la consulta (por nombres de campo en vez de por indice de campo)
if (!($cur = $this->execute())){
return null;
}
$array[] = $row;
}
return $array;
}
public function setQuery($sql){
// Carga la consulta SQL
return false;
}
$this->sql = $sql;
return true;
}
public function freeResults(){
// Libera el resultado de la memoria y continua con el script
return true;
}
public function loadObject(){
if ($cur = $this->execute()){
return $object;
}
else {
return null;
}
}
else {
return false;
}
}
public function getNumFilas(){
// Devuelve el numero total de filas (horizontal) de la consulta
}
function getNumColumnas(){
// Devuelve el numero total de columnas (vertical) de la consulta
}
public function getTotalConsultas(){
// Devuelve el numero total de consultas realizadas
return $this->queries;
}
public function depura($data){
// Funcion para evitar el SQL INJECTION
// Elimina los espacios en blanco
// Aplicará stripslashes si está habilitado magic_quotes_gpc
{
}
// Hace falta una conexión a mySQL para usar esta funcion
return $data;
}
public function getUltimoID(){
return false;
}
$this->queries++;
return $this->resource;
}
public function fetch_array(){
}
function __destruct(){
// Libera el resultado de la memoria y cierra la conexión
}
}
?>
Implementación
Código PHP:
Ver original<?php
include('class-mysql.php');
// Hacemos la conexión
$db = DataBase::getInstance('localhost','root','password','hmgroupcat');
// Prueba de valores
$valor1=1;
$valor2='2009-10-06 19:03:49';
$valor1=$db->depura($valor1);
$valor2=$db->depura($valor2);
// Hacemos la consulta segura:
$query = sprintf("SELECT ID,post_date,post_content FROM wp_posts WHERE ID='%s' OR post_date='%s'", $valor1, $valor2);
$db->setQuery($query);
// La ejecutamos y al mismo tiempo obtenemos un arreglo de objetos
// con los campos especificados en la consulta como propiedades.
$datos = $db->getArrayResult();
//$datos = $db->fetch_array();
//echo $db->getUltimoID();
// Otro ejemplo de depuración de datos de entrada
$_POST['username']='n-1"\/%aDan';
$_POST['password']='23/""\1235a*!';
echo $username = $db->depura($_POST['username']);
echo "<br/>";
echo $password = $db->depura($_POST['password']);
echo $db->getNumFilas();
echo "<br/>";
echo $db->getNumColumnas();
echo "<br/>";
echo $db->getTotalConsultas();
echo "<pre>";
echo "</pre>";
// Los imprimimos directamente en pantalla...
/*foreach($datos as $campo){
echo 'ID: '.$campo->ID;
echo 'Nombre: '.$campo->post_name;
echo 'Grupo: '.$campo->post_status;
echo '<br />';
}
*/
?>
Y ahora las TRES funciones que me gustaría que me explicarais que es lo que hacen...
Código PHP:
Ver originalpublic function execute(){
if(!($this->resource = mysql_query($this->sql, $this->conexion))){ return null;
}
}
$this->queries++;
return $this->resource;
}
public function alter(){
if(!($this->resource = mysql_query($this->sql, $this->conexion))){ return false;
}
return true;
}
public function loadObject(){
if ($cur = $this->execute()){
return $object;
}
else {
return null;
}
}
else {
return false;
}
}
Esta no he conseguido que funcione:
Código PHP:
Ver originalpublic function getUltimoID(){
return false;
}
$this->queries++;
return $this->resource;
}
Y esta de aquí
function getArrayResult() pensaba que se podría hacer de la siguiente manera pero no funciona, es muy diferente?
Muchas gracias de antemano!