Jörg Reinholz: php/mysql mehrere tables auf einmal erstellen

Beitrag lesen

was soll ich denn machen??

  
mysql_connect("localhost","root","");  
mysql_select_db("data");  
$query = "CREATE TABLE IF NOT EXISTS `first`(`name` varchar(50),`lastname` varchar(50),`phone` int, `gender` boolean)";  
mysql_query($query) or error_log( __FILE__ . ':' . _LINE__ . ':error:' . mysql_error() );  
$query = "CREATE TABLE IF NOT EXISTS `second`(`id` int(10) unsigned AUTO_INCREMENT,`company` varchar(50),`adress` varchar(50), `age` tinyint)";  
mysql_query($query) or error_log( __FILE__ . ':' . _LINE__ . ':error:' . mysql_error() );  
mysql_close();  

Du musst die Möglichkeit eines Fehler natürlich beachten. Zudem wäre gerade hier auch die Nutzung des Transaktionsmechanismus wünschenswert - was aber nur beim Tabellentyp InnoDB geht. Ist dann auch noch eine umfangreichere Abarbeitung erwünscht, dann lagere diese in eine Funktion (meinetwegen auch ein Objekt) aus:

  
  
my_error_log($s, $exit=false, $rollback=false, $db=false) {  
   error_log($s);  
   if ($db && $rollback) { mysql_query('ROLLBACK') }  
   if ($exit) { exit; }  
}  
  
$DB=mysql_connect("localhost","root","") or my_error_log ('Verbindungsaufbau nicht möglich', true);  
mysql_select_db("data");  
mysql_error($DB), true);  
mysql_query('START TRANSACTION', $DB)  or my_error_log( __FILE__ . ':' . _LINE__ . ':error:' . mysql_error($DB), true );  
$query = "CREATE TABLE IF NOT EXISTS `first`(`name` varchar(50),`lastname` varchar(50),`phone` int, `gender` boolean)";  
mysql_query($query, $DB)  or my_error_log( __FILE__ . ':' . _LINE__ . ':error:' . mysql_error($DB), true, true, $DB );  
$query = "CREATE TABLE IF NOT EXISTS `second`(`id` int(10) unsigned AUTO_INCREMENT,`company` varchar(50),`adress` varchar(50), `age` tinyint)";  
mysql_query($query, $DB)  or my_error_log( __FILE__ . ':' . _LINE__ . ':error:' . mysql_error($DB), true, true, $DB );  
mysql_query('COMMIT', $DB) or my_error_log( __FILE__ . ':' . _LINE__ . ':error:' . mysql_error($DB), true );  
mysql_close($DB);  

Hinweise:

1.)
Der Code ist nicht getestet, er kann Typos enthalten.

2.a)
Fehler erscheinen, wenn nicht anders bestimmt, beim Aufruf via http-Protokoll im normalen Error-Log des
Webservers.
2.b)
Fehler erscheinen, wenn nicht anders bestimmt, beim Aufruf als CLI (~> php skript.php) in der Konsole.

3.)
Was __FILE__ und __LINE__ bedeuten steht im Handbuch unter "magic constants".

Jörg Reinholz