Heyho!
Ich baue gerade einen Installer für mein System. Um die Datenbank aufzusetzen soll er eine .sql-Datei auslesen und mit mysqli_multi_query() ausführen.
Leider können die Tabellen nicht angelegt werden, weil InnoDB Probleme beim Anlegen der FK-Constraints hat.
Ich habe deshalb mal das Beispiel für mysqli_multi_query aus der PHP-Doku mit dem einfachen FK-Beispiel aus der MySQL-Doku kombiniert, einfach nur um irgendwas irgendwie ans Laufen zu kriegen:
<?php
$link = mysqli_connect("localhost", "benutzer", "passwort", "datenbankname");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "CREATE TABLE parent (id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB;";
/* execute multi query */
echo "sending query";
if (mysqli_multi_query($link, $query)) {
echo "start processing multi-query";
do {
/* store first result set */
if ($result = mysqli_store_result($link)) {
while ($row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
mysqli_free_result($result);
}
else
echo "no result returned";
/* print divider */
if (mysqli_more_results($link)) {
printf("-----------------\n");
}
} while (mysqli_next_result($link));
}
/* close connection */
mysqli_close($link);
?>
Die Ausgabe ist eine weiße Seite mit "sending query". Er kommt also noch nicht einmal in die while-Schleife.
Führe ich SHOW ENGINE INNODB STATUS in phpMyAdmin aus, sagt der Fehler:
LATEST FOREIGN KEY ERROR
------------------------
100301 14:14:05 Error in foreign key constraint of table mec@002dcms/parent:
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB:
Cannot resolve column name close to:
) REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB
Woran liegt das? Die Beispiel-Codes aus den Dokus müssten doch eigentlich funktionieren....Kann ich das mit mysqli_multi_query nicht machen?
Das Verrückte: Wenn ich obiges SQL in phpMyAdmin ausführe, klappts.
Hat jemand ne Idee? Bin etwas verzweifelt gerade...
Mein System:
Server Version: 5.1.33-community
Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9
MySQL-Client-Version: 5.0.51a
(XAMPP unter Windows Vista)
Viele Grüße
Mastershrimp