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

    [classe] Errore Importazione File Sql

    Ragazzi mi sto sbattendo la testa con questa classe per eseguire i file sql.
    Il problema si presenta ogni qualvolta in un qualsiasi campo vi è una stinga contenente il caratere ";" che ovviamente delimita le query sql..

    Codice PHP:
    class parse
    {
       var 
    $file;
       
       function 
    parse($file)
       {      
          
    $this->setFile($file);
            
    $this->startParsing();
       }
       
       
    /** 
       * @purpose : Sets filename to be parsed
       * @params $file
       * @return none
       */
       
    function setFile($file)
       {
          
    $this->file $file;
       }

       
    /**
       * @purpose : Gets filename to be parsed
       * @params none
       * @return filename
       */
       
       
    function getFile()
       {
          return 
    $this->file;
       }
       
       
    /** 
       * @purpose : Parses SQL file
       * @params none
       * @return none
       */

       
    function startParsing()
       {
     
          
    $file $this->getFile();      
            
    // Getting the SQL file content        
            
    $content file_get_contents($_SERVER['DOCUMENT_ROOT'].$file);
                    
            
    // Processing the SQL file content             
            
    $file_content explode("\n",$content);            
          
          
            
    $query "";
            
              
    // Parsing the SQL file content             
              
    foreach($file_content as $sql_line)
              {        
                 if(
    trim($sql_line) != "" && strpos($sql_line"--") === false)
                 {             
                    
    $query .= $sql_line;
                      
    // Checking whether the line is a valid statement
                      
    if(preg_match("/(.*);/"$sql_line))
                      {
                         
    $query substr($query0strlen($query)-1);                       
                           
    //Executing the parsed string, returns the error code in failure
                           
    $result mysql_query($query)or die(mysql_error());
                           
    $query "";
                      }
                 }
              } 
    //End of foreach
            
            
    return true
       } 
    //End of function
        
    //End of class 
    il problema dovrebbe essere qui.. ma come risolverlo?
    Codice PHP:
    if(preg_match("/(.*);/"$sql_line)) 

  2. #2
    Scaricati i sorgenti di phpMyAdmin e studiati il suo parser SQL.

  3. #3
    Ciao Filippo,
    L'ho già controllato.. ma non mi è tanto chiaro.
    E' da ieri che cerco in rete. Sembri proprio che sto problema non se lo sia mai posto nessuno.
    boh

  4. #4
    Il problema può essere risolto implementando correttamente il parser SQL. La semplice ricerca di ; non è sufficiente. Nel codice di phpMyAdmin trovi tutto quello che ti serve. In alternativa, fai riferimento alle specifiche ufficiali dell'SQL ed implementale.

  5. #5
    il tutto si può risolvere con una corretta espressione regolare... del tipo
    /(QUI LE POSSIBILI FUNZIONI DI SQL INSERT - CREATE TABLE - DROP ECC...) (QUI TUTTI I CARATTERI) (QUI IL ";")

    Qualcuno può aiutarmi a farla?

  6. #6
    Non è così semplice.

    Infatti basta un INSERT che contiene ; ed il parsing non avviene correttamente.

  7. #7
    una cosa non andrebbe quindi
    Codice PHP:
    if(
    preg_match("/INSERT INTO(.*);/"$sql_line) ||
    preg_match("/CREATE TABLE(.*);/"$sql_line) ||
    preg_match("/DROP TABLE(.*);/"$sql_line)

    {
    //QUERY


    uff

  8. #8
    A parte che quelle espressioni regolari sono greedy, case sensitive e lavorano solo per riga per cui non andrebbero bene comunque, come ti ho già scritto, devi implementare un parser SQL. Se vuoi usarne uno già pronto, c'è quello di phpMyAdmin, altrimenti cerca con Google (es. su phpclasses), sicuramente ne esistono altri già fatti e funzionanti.

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.