Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Aiuto su classe per gestire database sqlite

    Finalmente dopo tanto posso riscrivere nel forum, come avrete notato non posso connettermi quasi mai, visto che non ho tempo.

    Cmq, sto realizzando una classe per gestire un database sql, contenente, per ora, le seguenti funzioni:

    • Apertura / chiusura database.
    • Conteggio record tabella, con o senza filtro.
    • Esequzione query con l'insermento della funzione sqlite_escape_string().


    Per ora la mia classe è questa qui:

    Codice PHP:
    class Connect 
    {
      var 
    $sq null;
      var 
    $sqerror null;
      var 
    $lastquery null;

      function 
    __construct($path)
      {
        
    $this->sq sqlite_open($path0666$this->sqerror)or die("Errore.");
      }

      function 
    query($args)
      {
         if (
    func_num_args() > 1) {
            
    $args func_get_args();

            
    $this->lastquery call_user_func_array("sprintf"addslashes($args));
            
            return 
    sqlite_query($this->sq$this->lastquery);
         }
      }    

      function 
    query($args)
      {
         if (
    func_num_args() > 1) {
            
    $args func_get_args();
            
            for (
    $i 0$i count($args); $i++)
            {
               if (
    $i 0) {
                  
    $args[$i] = sqlite_escape_string($args[$i]);
               }
            }   
           
            
    $this->lastquery call_user_func_array("sprintf"$args);
            
            return 
    sqlite_query($this->sq$this->lastquery);
         }
      }  

      function 
    records_count($args)
      {
         
    $args func_get_args();
         
         if (
    func_num_args() == 1) {
            
    $query "SELECT * FROM " $args[0];
         }elseif (
    func_num_args() == 2) {
            
    $query "SELECT * FROM " $args[0] . " WHERE " $args[1]; 
         }
         
         if (
    func_num_args() > && func_num_args() < 3) {
            
    $rows sqlite_query($this->sq$query);
            return 
    sqlite_num_rows($rows);
         }
      }

      function 
    close()
      {
        
    sqlite_close($this->sq);
      }

    Tutte le funzioni vanno correttamente, eccetto la funzione query(), quest'ultima funziona per alcune query, tipo quella di inserimento, ma no in altre, tipo quella di selezione, per farvi un'esempio:

    Io inizializzo la classe nella variabile $conn, per poi eseguire questo codice:

    Codice PHP:
    $query $conn->query("SELECT * FR0M %s"$_GET["category"]);

    while (
    $rs sqlite_fetch_array($query))
    {
       
    print_r($rs);

    Ma non mi restituisce nessun risultato, e come se non mi eseguisse, anche se sono corrette, alcune query, come mai?

  2. #2
    due osservazioni:

    1) se fai una classe per interrogare il db, è inutile che poi per scorrere i risultati delle interrogazioni, fuori dalla classe, tu debba ricorrere a sqlite_fetch_array. Non serve a nulla la classe altrimenti. La classe deve prevedere i metodi per ritornare il fetching, in vari modi, dei dati della query

    2) Perchè invece non usi PDO per la tua classe? Object-Oriented, ideale per la realizzazione di classi, fornisce tutte le api necessarie per la gestione di query a parametri dinamici, normalizzazione degli input, etc...

    e cmq, se non ti torna nulla, controlla che la query che crei sia corretta sia nella forma che nei risultati attesi.
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    In che senso la classe non serve a nulla, mi serve per evitare l'sql injector, tramite la funzione sqlite_real_string(), vedi?.

    Scusa se per lo sbaglio ho postato due funzioni query(), stavo provando a risolvere il problema quando ho incollato il codice, è l'ultima in realtà che io uso?

    In'oltre le classi li sto usando perché, dopo, se lo ritieno opportuno vorrei passare da sqlite a mysql, almeno cosi modifico solo la classe e no tutti i script che la usano.

    Cmq, cos'è pdo? puoi darmi più informazioni.

    Se è possibile vorrei risolvere il problema utilizzando la classe creata da me, proprio perché mi sembra strano che non va la funzione, visto che la query e giusta, e i parametri passati ad sqlite_query(), li passa correttamente.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.