Я пытаюсь закодировать очень простой запрос MySQL SELECT, согласно приложенному:
#
# MODULES
#
use strict;
use DBI;
use DBD::mysql;
#
# CONNECT
#
my $dbd = DBI->connect("dbi:mysql:dbname=$db_name;host=$host;mysql_server_prepare=1;",$db_user, $db_pwd)
or die 'No connection to dB : '.DBI::errstr;
#
# PREPARE
#
my $query = "SELECT * FROM $table WHERE $search_field = ? ";
my $prep = $dbd->prepare($query)
or die "ERR: " .$dbd->errstr;
#
# EXECUTE
#
$prep->execute( $search_data )
or die 'ERR : '.$prep->errstr;
#
# SHOW
#
while (my @data = $prep->fetchrow_array ) {
foreach my $line (@data) {
print $line.', ';
}
print "\n";
}
Поле поиска с TinyText.(но пробовал также varchar, тот же результат) Поле поиска кодируется utf8_unicode_ci (но пробовал также latin_general_ci, тот же результат)
Если я запускаю запрос с цепочкой только для чисел для $ search_data (как 0124345): нормально, Я получаю результат
Если я запускаю запрос с цепочкой только для текста для $ search_data (например, AZERTY): хорошо, я получаю результат
НО:
Если я запускаюзапрос со смешанным текстом / числами (например, AZERTY01234): запись не найдена,
Если я выполню запрос со смешанным текстом с тире, точкой и т. д. (например, foo-bar): запись не найдена
Если я запустилзапрос со смешанным текстом с тире, точкой и т. д. (например, foo + bar): запись не найдена
Я пробовал несколько возможных исправлений, но безуспешно.(изменение типа данных SQL с использованием и без простых / двойных кавычек, без подготовленного запроса ...)
Я понятия не имею, почему и как его решить.
Спасибо заранеедля некоторых подсказок.