Ich versuche eine einfache Abfrage als vorbereitete Anweisung auszuführen, habe aber keinen Erfolg. Hier ist der Code:
%Vor% Der MySQL Server antwortet mit einem Syntaxfehler near '''
.
Die Ausgabe des DBI-Trace zeigt
an %Vor%Für mich sieht es so aus, als würde die Aussage nicht so vorbereitet, wie sie sollte. Wenn ich die Abfrage ohne den Parameter sende, funktioniert es wie erwartet.
Was vermisse ich hier?
Die DBI-Version ist DBI 1.637-ithread
, die MySQL-Version ist 5.5.57-0+deb8u1
Getestet mit Windows perl 5, version 26, subversion 1 (v5.26.1) built for MSWin32-x86-multi-thread-64int
und Ubuntu perl 5, version 22, subversion 1 (v5.22.1) built for x86_64-linux-gnu-thread-multi
Bearbeiten1:
Für den Kontext: Ich habe das Problem bei der Verwendung von Catalyst mit Catalyst::Plugin::Session::Store::DBIC . Hier ist die ID-Spalte ein Varchar (72) -Typ, der eine Session-ID enthält.
Bearbeiten2:
4.043
$sth->execute('session:foo');
führt zum selben Problem
$sth->bind_param('session:foo', SQL_VARCHAR);
führt zum selben Problem
$sth->bind_param(1, 1512407082, SQL_INTEGER);
Bearbeiten3:
Ich habe die Zeit gefunden, weitere Tests durchzuführen, aber nicht mit befriedigenden Ergebnissen:
MYSQL_VERSION_ID 50557
angegeben wurde, während meine beiden ursprünglichen Testserver MySQL 5.7 MYSQL_VERSION_ID 50720
und MYSQL_VERSION_ID 50716
verwenden.
$dbh->{mysql_server_prepare} = 1;
klappt es! Vielleicht hilft das jemand, der diese q findet, aber ich würde jetzt lieber die eigentliche Ursache des Problems machen Nach einigen Tests kam ich zu dem Schluss, dass dies ein Kompatibilitätsproblem zwischen DBD :: mysql und MySQL Client 5.7 (und / oder ) zu sein scheint MySQL Server 5.5 ).
Zumindest habe ich eine Lösung für Ubuntu 16 (xenial) gefunden, also für andere, die auf dasselbe Problem stoßen könnten:
libmysqlclient-dev
ohne den Server / Client ausreichend sudo cpanm --reinstall DBD::mysql
neu, damit es mit dem nun installierten MySQL 5.6 Ich werde ein Problem im DBD :: mysql GitHub einreichen und werde diese Antwort aktualisieren, falls es solche gibt irgendwelche Nachrichten bezüglich dieses Problems.
Eine alternative Lösung, die auch bei mir funktioniert hat:
Lassen Sie den Server Ihre Anweisung $dbh->{mysql_server_prepare} = 1;
Tags und Links mysql perl prepared-statement dbi