Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/09/2013, 18:55
Avatar de fegm_4
fegm_4
 
Fecha de Ingreso: febrero-2013
Mensajes: 114
Antigüedad: 11 años, 2 meses
Puntos: 8
Metodo en clase php para evitar datos duplicados

Buenas a todos!

He estado trabajando en una clase de php usando mysqli para poder acceder a una base de datos. Investigando encontré una bastante completa que me permite hacer consultas e inserciones. El problema radica en que cuando hago la inserción, no se como puedo hacer para que esta me verifique si el registro que introduje anteriormente ya existe.

La clase es la siguiente:

Código PHP:
Ver original
  1. class DBConnector {
  2.       protected static $conn;
  3.       protected static $stmt;
  4.       protected static $reflection;
  5.       protected static $sql;
  6.       protected static $data;
  7.       public static $results;
  8.       protected static function conectar() {
  9.           self::$conn = new mysqli(DBserver, DBuser, DBpassword, DBname);
  10. }
  11.       protected static function preparar() {
  12.           self::$stmt = self::$conn->prepare(self::$sql);
  13.           self::$reflection = new ReflectionClass('mysqli_stmt');
  14.       }
  15.       protected static function set_params() {
  16.           $method = self::$reflection->getMethod('bind_param');
  17.           $method->invokeArgs(self::$stmt, self::$data);
  18. }
  19.       protected static function get_data($fields) {
  20.           $method = self::$reflection->getMethod('bind_result');
  21.           $method->invokeArgs(self::$stmt, $fields);
  22.           while(self::$stmt->fetch()) {
  23.               self::$results[] = unserialize(serialize($fields));
  24.         }
  25. }
  26.       protected static function finalizar() {
  27.           self::$stmt->close();
  28.           self::$conn->close();
  29. }
  30.       public static function ejecutar($sql, $data, $fields=False) {
  31.           self::$sql = $sql;
  32.           self::$data = $data;
  33.           self::conectar();
  34.           self::preparar();
  35.           self::set_params();
  36.           self::$stmt->execute();
  37.           if($fields) {
  38.               self::get_data($fields);
  39.           } else {
  40.               if(strpos(self::$sql, strtoupper('INSERT')) === 0) {
  41.                   return self::$stmt->insert_id;
  42. } }
  43.           self::finalizar();
  44.       }
  45. }

Y en el archivo de prueba tengo el siguiente comando:
Código PHP:
Ver original
  1. $nickname = 'ppepe';
  2. $password = md5('pepe123');
  3. $name = 'Pedro Perez';
  4. $email = '[email protected]';
  5. $permissions = 0;
  6.  
  7. $sql = "INSERT INTO user
  8.          (nickname, password, name, email, permissions)
  9.          VALUES (?, ?, ?, ?,?)";
  10.   $data = array("ssssi",
  11.                 "{$nickname}", "{$password}", "{$name}", "{$email}","{$permissions}");
  12.   $insert_id = DBConnector::ejecutar($sql, $data);
  13.  
  14. echo $insert_id;

La cosa es que quiero que la comprobación sea en la clase y no fuera en el archivo.

Agradezco quien pueda ayudarme
__________________
--
Aqui fegm_4