Ich habe drei gespeicherte Prozeduren für drei verschiedene ERPs, die fast genau die gleichen Operationen machen, also entschied ich mich, nur einen zu machen und Parameter zu verwenden. Einige der Feldnamen ändern sich abhängig von den Parametern, daher setze ich sie in Variablen. Dann verwende ich vorbereitete Anweisungen, damit es funktioniert.SQL-Syntaxfehler mit vorbereiteten Anweisungen und Variablen
Eine Arbeits Update, das nicht vorbereitete Anweisungen nicht verwendet ist wie folgt:
update lt_erp_barcodes
set barcode_list = concat(',', curr_barcode, barcode_list)
where cod_navision = curr_erp_code;
Es aktualisiert die aktuelle barcode_list sich am Anfang der Liste hinzugefügt curr_barcode, und auch das Hinzufügen ein Komma. (, Curr_barcode, der Rest der Liste)
Mein Ansatz, um es mit vorbereiteter Aussage zu machen Arbeit ist:
set @erp_code_field_name = "cod_navision";
set @curr_erp_code = '12345';
set @curr_barcode = '123123123';
set @q1 = concat('update lt_erp_barcodes
set barcode_list = (\',\'', @curr_barcode, ' barcode_list)
where ', @erp_code_field_name, ' = ', @curr_erp_code);
prepare update_barcode_list from @q1;
execute update_barcode_list;
Aber wenn ich zu prepare
rufe die folgenden Fehler ausgelöst:
0 228 10:30:17 Vorbereitung update_barcode_list von @ q1 Fehlercode: 1064. Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in die Bedienungsanleitung zu Ihrer MySQL-Server-Version für die richtige Syntax entspricht in der Nähe zu verwenden ‚123123123 barcode_list wo cod_navision = 12345‘ in Zeile 2 0,047 sec
Wie kann ich den zweiten Block von Code Arbeit des gleiches machen wie der erste? Dank
Können Sie die generierte SQL-Anweisung drucken? – mcalex
Eigentlich können Sie doppelte Anführungszeichen anstatt einfache Anführungszeichen um die Zeichenfolge verwenden, wenn Sie ein einfaches Anführungszeichen benötigen, d. H. Concat ("'", @ variable, "'"); so ähnlich. – Learning
Ich denke, Sie sind ein wenig verwirrt darüber, wie vorbereitete Anweisungen funktionieren sollen (und wie sie Sie vor der SQL-Injektion schützen). Am Ende bedeutet die Art, wie du es versuchst *, dass du keinen Schutz hinzugefügt hast. Sie verketten SQL-Abfragen immer noch zusammen. – Phylogenesis