use strict; use warnings; use Test::More; use DBI; use vars qw($test_dsn $test_user $test_password); use lib 't', '.'; require 'lib.pl'; my $id1 = 'session:06b6d2138df949524092eefc066ee5ab3598bf96'; my $id2 = q(string\\string"string'string); my $id2_quoted_no_backslash = q('string\\string"string''string'); my $dbh = DbiTestConnect($test_dsn, $test_user, $test_password, { RaiseError => 1, PrintError => 0, AutoCommit => 0 }); if ($dbh->{mariadb_serverversion} < 50001) { plan skip_all => "Servers < 5.0.1 do not support sql_mode NO_BACKSLASH_ESCAPES"; } plan tests => 20; ok $dbh->do('CREATE TEMPORARY TABLE t(id VARCHAR(255), value TEXT)'); ok $dbh->do('INSERT INTO t(id, value) VALUES(?, ?)', undef, $id1, 'value1'); ok $dbh->do('INSERT INTO t(id, value) VALUES(?, ?)', undef, $id2, 'value2'); ok $dbh->do("SET sql_mode = 'NO_BACKSLASH_ESCAPES'"); is $dbh->quote($id2), $id2_quoted_no_backslash; for my $server_prepare (0, 1) { $dbh->{mariadb_server_prepare} = $server_prepare; $dbh->{mariadb_server_prepare_disable_fallback} = 1; ok my $sth = $dbh->prepare('SELECT * FROM t WHERE id = ?'); ok $sth->bind_param(1, $id1); ok $sth->execute(); is_deeply $sth->fetchall_arrayref(), [ [ $id1, 'value1' ] ]; ok $sth->bind_param(1, $id2); ok $sth->execute(); is_deeply $sth->fetchall_arrayref(), [ [ $id2, 'value2' ] ]; } ok $dbh->disconnect();