2016-07-28 20 views
1

Ich habe diesen Fehler, wenn ich versuche Transaktionen zu verwenden:MYSQL Syntaxfehler bei Transaktionen?

Sie haben einen Fehler in Ihrer SQL-Syntax; das Handbuch, dass zu Ihrer MySQL-Server-Version für die richtige Syntax entspricht in der Nähe verwenden 'INSERT INTO pagos (userID, pagoMonto, pagoFecha, pagoMedioUtilizado, pagoCuentaO' in Zeile 2

Dies ist die Abfrage, die ich bin versucht.

START TRANSACTION; 
INSERT INTO pagos (userID, pagoMonto, pagoFecha, pagoMedioUtilizado, pagoCuentaOrigen, pagoSucursal, pagoCodigo) 
VALUES('$userID', '$pagoMonto', '$pagoFecha', '$pagoMedioUtilizado', '$pagoCuentaOrigen', '$pagoSucursal', '$pagoCodigo'); 
INSERT INTO pagosVerificados (pagoID, userID, cursoID) 
VALUES(LAST_INSERT_ID(), '$userID', '$cursoID'); 
COMMIT; 

ich alle meine Tabellen als InnoDB haben

MySQL Version: 5.6.30

Ich teste, um zu sehen, ob es ein Problem mit den Variablen ist Inhalt, also habe ich sie ausgedruckt:

UserID: 16 
cursoID: 15 
pagoMonto: 25 
pagoFecha: 2016-05-01 
pagoMedioUtilizado: efectivo 
pagoCuentaOrigen: 216852 
pagoSucursal: 55 
pagoCodigo: 55555 

Ich verwende die bei the manual lesen Syntax für die 5.6-Version. Wo ist der Fehler?

+0

Haben Sie Ihre Variablen schrubben keine einfache Anführungszeichen, um sicherzustellen, gibt es? –

+0

Ja, es gibt keine. – Rosamunda

+0

Ich habe nicht mit Transaktionen in MySQL so viel gearbeitet, aber, sind Sie sicher, dass sollte als eine "Abfrage" ausgeführt werden? (Ich habe gerade die zwei Inserts bemerkt; ich bin ziemlich sicher, dass Sie diese nicht als eine Abfrage ausführen können.) – Uueerdo

Antwort

1

Ich glaube, Sie versuchen, mehrere Anweisungen in einem Aufruf auszuführen. Tu das nicht. Führen Sie eine Anweisung pro Aufruf aus.

Verwendung PDO Methoden für Transaktionen, und verwenden Sie vorbereitete Abfragen stattdessen PHP-Variablen in die SQL-Strings von Interpolations-:

$pdo->beginTransaction(); 

$stmt = $pdo->prepare("INSERT INTO pagos 
    SET userID=?, pagoMonto=?, pagoFecha=?, pagoMedioUtilizado=?, 
     pagoCuentaOrigen=?, pagoSucursal=?, pagoCodigo=?"); 
$stmt->execute([$userID, $pagoMonto, $pagoFecha, $pagoMedioUtilizado, 
    $pagoCuentaOrigen, $pagoSucursal, $pagoCodigo]); 

$stmt = $pdo->prepare("INSERT INTO pagosVerificados 
    SET pagoID=LAST_INSERT_ID(), userID=?, cursoID=?"); 
$stmt->execute([$userID, $cursoID]); 

$pdo->commit();