zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden PHP & MySQL: Fremdschlüssel

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 31.08.2011, 15:56
Benutzerbild von dows
Basti
neuer user
Thread-Ersteller
 
Registriert seit: 01.10.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 16:05 Uhr)
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 31.08.2011, 16:46
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Versuch' die Queries mal einzeln abzuschicken, afaik, ist nur ein Query je Aufruf von "mysql_query" erlaubt.
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 31.08.2011, 16:49
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.626
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Außerdem sollte der Query-String nicht mit einem Semikolon enden, laut PHP-Manual.
__________________
github | http://dnaber.de
Mit Zitat antworten
  #4 (permalink)  
Alt 31.08.2011, 17:26
Benutzerbild von dows
Basti
neuer user
Thread-Ersteller
 
Registriert seit: 01.10.2008
Ort: Berlin
Beiträge: 86
dows befindet sich auf einem aufstrebenden Ast
Daumen hoch

Beide habt ihr Recht.
In der deutschen Version von php.net steht das mit den mehreren Queries nicht. In der englischen ist es nahezu der erste Satz:
Zitat:
mysql_query() sends a unique query (multiple queries are not supported)
Die Semikolon waren nur das notwendige Übel um die Queries zu trennen.

Danke für die schnellen und kompetenten Antworten.
Mit Zitat antworten
Antwort

Stichwörter
constraint, fremdschlüssel, mysql, php

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP zu MySQL Verbindungs-Fehler markuskoehler Serveradministration und serverseitige Scripte 16 29.04.2009 21:00
Usermaps per PHP und MySQL? R4V3N Serveradministration und serverseitige Scripte 6 28.01.2009 10:33
Dateien auslagern - Include und PHP ArcVieh Serveradministration und serverseitige Scripte 17 27.03.2008 19:09
Buchempfehlung für PHP und MySQL Einstieg Crizzo Ressourcen 4 04.08.2007 20:57
Gute Bücher? (PHP, mySQL, AJAX, [Perl, C(#)]) psycho_dmr Offtopic 4 24.03.2006 15:24


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:45 Uhr.