Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 31.08.2011, 14:56
Benutzerbild von dows
dows dows ist offline
Basti
neuer user
Thread-Ersteller
 
Registriert seit: 30.09.2008
Ort: Berlin
Beiträge: 86
dows befindet sich auf einem aufstrebenden Ast
Frage PHP & MySQL: Fremdschlüssel

Hallo,

ich habe eine Klassische Master-Detail Tabellen Beziehung in meiner MySQL Datenbank.

Erstelle master-Tabelle
Code:
CREATE TABLE `master` (
  `m_id` int(11) NOT NULL AUTO_INCREMENT,
  `m_value` varchar(25) NOT NULL,
  PRIMARY KEY (`m_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Erstelle detail-Tabelle
Code:
CREATE TABLE `detail` (
  `d_id` int(11) NOT NULL AUTO_INCREMENT,
  `m_id` int(11) NOT NULL,
  `d_value` varchar(25) NOT NULL,
  PRIMARY KEY (`d_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
Erstelle Fremdschlüsselbeziehung
Code:
ALTER TABLE detail
ADD CONSTRAINT master_detail_fk
FOREIGN KEY(m_id)
REFERENCES master (m_id)
ON DELETE CASCADE ON UPDATE CASCADE
Über PHP mach ich nun folgendes:
PHP-Code:
<?
        $master 
"INSERT INTO `master`(m_value)VALUES('MasterValue');";
        
mysql_query($master) or print('Master Fehler');

        
$fk mysql_insert_id();

        
$detail_1 "INSERT INTO `detail` (m_id,d_value)VALUES ('$fk','Das ist die erste Zeile');";
        
$detail_2 "INSERT INTO `detail` (m_id,d_value)VALUES ('$fk','Das ist die zweite Zeile');";

        
$detail 'LOCK TABLES `detail` WRITE;' $detail_1 $detail_2 'UNLOCK TABLES;';

        
mysql_query($detail) or print('Detail Fehler: 'mysql_errno() .': ' mysql_error());
        
        echo 
"<pre>";
        echo 
$master;
        echo 
"<br />";
        echo 
$detail;
        echo 
"</pre>";
?>
Soll heißen:
Erstelle einen Eintrag in master und hole mir anschlißend die ID des letzten Eintrags.
Erstelle anschließend zwei Einträge in detail. Selbstverständlich ist das durch die Fremdschlüsselbeziehung nur dann möglich, wenn der Wert der in detail.m_id eingetragen werden soll bereits in als master.m_id vorhanden ist.


Als Ergebenis erhalte ich folgende Ausgabe:
Code:
Detail Fehler: 1064: You have an error in your SQL syntax; check the  manual that corresponds to your MySQL server version for the right  syntax to use near 'INSERT INTO `detail` (m_id,d_value)VALUES ('2','Das  ist die erste Zeile');INSERT' at line 1

INSERT INTO `master`(m_value)VALUES('MasterValue');
LOCK TABLES `detail` WRITE;INSERT INTO `detail` (m_id,d_value)VALUES ('2','Das ist die erste Zeile');INSERT INTO `detail` (m_id,d_value)VALUES ('2','Das ist die zweite Zeile');UNLOCK TABLES;
Wenn ich diese Queries jedoch über phpMyAdmin jage, werden die Einträge korrekt gemacht.

Sieht jemand einen Fehler, der dieses Problem hervorruft?
Für Ratschläge bin ich dankbar.

Geändert von dows (31.08.2011 um 15:05 Uhr)
Mit Zitat antworten
Sponsored Links