powie.de Tech Forum

pSys => pSys Allgemein => Thema gestartet von: k00ni am 07. März 2010, 10:24:52

Titel: Erweiterungen für psysdb
Beitrag von: k00ni am 07. März 2010, 10:24:52
Ich habe nun lange mit der db-Klasse vom Powie zu tun gehabt und brauchte hier und da ein paar Erweiterungen. Dass sind Funktionen die zum Teil eigenständig sind oder auf bestehenden aufbauen. Vielleicht braucht ihr ja das ein oder andere. Soweit dürften sie auch vollkompatibel mit der Version aus dem pSys sein.
 

serverid ) ) 
   return false;
else
   return true;
}

 
 

query ( $query ) ) 
   return false;
else
{
   $array = array ();
   while ( $entry = $this->fetch () )
   {
      $array [] = $entry [$column];
   }
   return $array;
}
}

 
 

fetch_row ( $query );
return $row [ $column ];
}  

 
 

escape_by_ref ( $A_argument );
           }
       }
       return true;
   }

 
 

 $value )
{
   $tmp [ $key ] = $this->escape ( $value );
}
return $tmp;
}

 
 

escape_by_ref ( $S_table );
if ( 0 serverid ) ) )
   return true;
else
   return false;
}
Titel: Erweiterungen für psysdb
Beitrag von: Powie am 07. März 2010, 11:01:06
nice !!!! :H:
Titel: Erweiterungen für psysdb
Beitrag von: k00ni am 15. März 2010, 12:13:17

escape_by_ref ( $like );
$res = $this->fetch_array ( \"SHOW TABLES FROM \". $this->dbname .\" LIKE \'%$like%\';\" );
foreach ( $res as $table )
{
   $tables [] = $table
  • ;
}
return $tables;
}

 



Nachfolgend eine Funktion zum Dumpen einer Datenbank. Es wird die Datenbank genommen, welche man beim Initialisieren der Klasse ausgewählt hat. Zum Dumpen wird der mysqldump-Befehl genutzt, der auf vielen Systemen zur Verfügung stehen sollte (getestet mit PHP4).
Die psysdb-Klasse muss etwas modifiziert werden, da man die Zugangsdaten bisher ja nicht speichert.
Erstmal die Funktion:
 

escape_by_ref ( $cache_dir );
$command = \"mysqldump -h\".  $this->dbhost .
               \" -u\".  $this->dbuser .
               \" -p\".  $this->dbpassword .
             \" --opt \". $this->dbname .\" >\".
                  \" \". $cache_dir .\"/backup____\". $this->dbname .
                                     \"____\". date ( \'d_m_Y_H_i\', time () ) .\".sql\";
exec ( $command, $output, $return );
return array ( \'output\' => $output,
            \'return\' => $return );
}

 
 
Die nötigen Modifikationen:
Im Konstruktur ( function psysdb ( ... ) ) folgendes hinzufügen:
 

$this->dbuser = $dbuser;
$this->dbpassword = $dbpassword;
$this->dbhost = $dbhost;
$this->dbname = $dbname;

 
 
Damit dürfte es dann funktionieren.
Titel: Erweiterungen für psysdb
Beitrag von: k00ni am 15. März 2010, 15:24:11
Und weil ich grad mal dabei bin ....
 

 Wert)
 */
function insertInto ( $table, $data )
{
$this->escape_by_ref ( $table );
$data = $this->escape_array ( $data );
$set_comma = false;
$sql = \"INSERT INTO $table ( \";
foreach ( $data as $key => $value )
{
   if ( true == $set_comma )
   {
      $sql .= \',\';
   }
   $set_comma = true;
   $sql .= $key;   
   $sql_where .= \"\'\". $value .\"\'\";   
}          
       $sql .= \"VALUES ( \". $sql_where .\" );\";
return $this->query ( $sql );
}

 
 
Man übergibt der Funktion den Tabellennamen und danach ein Array, was wie folgt aussieht:
 

array ( \'Spalte1\' => \'Wert1\', \'Spalte2\' => \'Wert2\', ... );

 
 
Die Keys müssen den Spaltennamen entsprechen, die Werte sind die späteren Werte im VALUES-Bereich.
Titel: Erweiterungen für psysdb
Beitrag von: k00ni am 29. April 2010, 09:27:14
Ich hab hier grad eine gefühlte Ewigkeit einen Bug gesucht, obwohl alles funktionierte. Problem war aber, dass mir die db-Klasse immer wieder num_rows = 1 zeigte, obwohl das Statement falsch war.
Daher würde ich vorschlagen, dass wenn ein Fehler geworfen wird durch eine fehlerhaftes Query, dass dann die \"Statistik\"-Werte zurückgesetzt werden:
 

$this->num_rows = 0;
$this->insert_id = 0;
$this->rows_affected = 0;

 
 
Sonst kommt man in Teufelsküche, wenn man auf if ( $foo->num_rows == 1) prüft, ein true zurückbekommt, aber in Wirklichkeit das Query falsch war und er die Werte eines vorherigen Queries gesetzt hatte.
 
Viele Grüße
Titel: Erweiterungen für psysdb
Beitrag von: k00ni am 20. Mai 2010, 09:11:23
Hier noch eine generische update-Funktion. Sie funktioniert analog zur insertInto-Funktion.
 

escape_all ( $table, $data, $column_name, $column_value );
$set_comma = false;
if ( false == is_array ( $data ) OR 0 == count ( $data ) )
{
   return false;
}
$sql = \"UPDATE $table SET \";
foreach ( $data as $key => $value )
{
   if ( true == $set_comma )
   {
      $sql .= \',\';
   }
   $set_comma = true;
   $sql .= $key . \"=\'\". $value .\"\'\";   
}          
       $sql .= \" WHERE $column_name = \'$column_value\'\";      
       return $this->query ( $sql );
}
?>