2016-01-13 13 views
5

ich ein Schema SQL-Datei (mit Syntaxfehler) haben, die mehrere Abfragen für Einstellungen DatenbankLehre (DBAL) Fehlerbehandlung während Ausführen mehrerer Abfragen

example.sql

CREATE TABLE IF NOT EXISTS `example` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` text COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; 


CREATExxxxxxxxxx TABLE IF NOT EXISTS `example2` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` text COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; 

example.php

$sqlContent = file_get_contents("example.sql"); 
$stmt = $conn->prepare($sqlContent); 
$result = $stmt->execute(); 

execute-Methode werfen keine Ausnahme auch, dass meine sql i nkorrekt. es Dokumentation sagt, es gibt false bei einem Fehler zurück, aber es gibt true zurück.

Wie sollte ich Exception Handling hier tun? Wie kann ich überprüfen, ob meine Anfrage einen Fehler aufweist?

+1

Lehre DBAL benutzt den m ysqli Treiber. Ich habe den neuesten Code überprüft und der DBAL sollte eine Exception werfen, wenn Mysqlis Preparation false für die Syntaxfehler zurückgibt. Problem mit dem mysqli-Treiber? http://www.doctrine-project.org/api/dbal/2.5/source-class-Doctrine.DBAL.Driver.Mysqli.MysqliStatement.html#83-102 –

+0

@MattS das Problem ist nicht in der Doctrine DBAL, es ist in PDO. Ich habe meine Antwort hinzugefügt. – Neodan

Antwort

0

Das Problem ist nicht in Doctrine DBAL, sondern in PDO. Wenn Sie den Treiber zu mysqli (statt pdo_mysql) ändern, dann werden Sie eine Fehlermeldung wie diese:

[Lehre \ DBAL \ Exception \ SyntaxErrorException]
Eine Ausnahme trat während der Ausführung ‚CREATE TABLE IF NOT VORHANDEN example (

`id` int(11) NOT NULL AUTO_INCREMENT,                                     
`name` text COLLATE utf8_unicode_ci NOT NULL,                                   
PRIMARY KEY (`id`)                                          ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

AUTO_INCREMENT = 1;
CREATExxxxxxxxxx TABLE IF NOT EXISTS example2 (

`id` int(11) NOT NULL AUTO_INCREMENT,                                     
`name` text COLLATE utf8_unicode_ci NOT NULL,                                   
PRIMARY KEY (`id`)                                          ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

AUTO_INCREMENT = 1; ':
Sie haben einen Fehler in Ihrer SQL-Syntax; das Handbuch, dass zu Ihrer MySQL-Server-Version entspricht, die für die richtige Syntax in der Nähe zu verwenden 'CREATExxxxxxxxxx TABLE IF NOT example2 (
id int (11) NOT NULL AUTO_I VORHANDEN' 8 an der Linie

Wenn Sie PDO direkt (nicht über Lehre), dann auch erhalten Sie keinen Fehler.

Wenn Sie wollen, dass es richtig funktioniert, dann müssen Sie die Emulation von vorbereiteten Anweisungen deaktivieren (set PDO::ATTR_EMULATE_PREPARES-0).

Verwandte Themen