У меня есть несколько запросов mysql в perl, но некоторые из значений предложения where содержат пробел между словами, например. Гамбия. Когда мои скрипты работают с аргументами where where, содержащими пробел, они игнорируют второе слово.
Я хочу знать, как я могу решить эту проблему, например, если я набираю гамбию, ее следует рассматривать в Гамбии, а не в.
Если вы используете DBI, вы можете использовать заполнители для отправки произвольных данных в базу данных, не заботясь об экранировании. Заполнитель является вопросительным знаком в выражении prepare
, фактическое значение присваивается execute
:
use DBI;
$dbh = DBI->connect("DBI:mysql:....",$user,$pass)
or die("Connect error: $DBI::errstr");
my $sth = $dbh->prepare(qq{ SELECT something FROM table WHERE name = ? });
$sth->execute('the gambia');
# fetch data from $sth
$dbh->disconnect();
Изменить: Если вы составляете запрос (как вы предложили в комментариях), вы можете использовать метод quote
:
my $country = "AND country = " . $dbh->quote('the gambia');
my $sth = $dbh->prepare(qq{ SELECT something FROM table WHERE name = ? $country});
Ну, во-первых, вы должны посмотреть на использование DBIx:: Class вместо необработанного SQL в вашем приложении.
Но если вы застряли в сыром SQL, то (если вы, по крайней мере, используете DBI), вы должны использовать точки привязки в своих SQL-операторах. Это поможет вам решить все ваши проблемы с кавычками.
$sth = $dbh->prepare('select something from somewhere where country = ?');
$sth->execute('The Gambia');
Дополнительную информацию о привязке см. в DBI docs.
id
, date
как день, time
, one
, one_r
, two
, two_r
, лига, страна, подробности ОТ футбола ГДЕ (одна LIKE TRIM (?) или две LIKE TRIM" (?)) $ страна $ лига $ дата $ лимит "); $ Sel-> выполнить ( "% $% команды", "% $% команды"); $ row = $ sel-> fetchrow_hashref (); $ Sel-> отделка ();
$country
и $league
.