Я хочу автоматически добавлять одинарные кавычки в мои запросы MySQL - PullRequest
0 голосов
/ 24 февраля 2011

У меня есть пара запросов mysql в perl, но некоторые значения предложения where содержат пробел между словами, например, в Гамбии.Когда мои сценарии выполняются с аргументами предложения where, содержащими пробел, они игнорируют второе слово.

Я хочу знать, как я могу решить эту проблему, т.е. если я набираю gambia, это следует рассматривать как gambia, а не как *.1003 *

Ответы [ 2 ]

6 голосов
/ 24 февраля 2011

Если вы используете 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});
2 голосов
/ 24 февраля 2011

Ну, во-первых, вы должны использовать в своем приложении что-то вроде DBIx :: Class вместо неформатированного SQL.

Но если вы застряли с необработанным SQL, то (при условии, что вы, по крайней мере, используете DBI), вы должны использовать точки привязки в своих инструкциях SQL.Это решит все ваши проблемы с цитированием.

$sth = $dbh->prepare('select something from somewhere where country = ?');

$sth->execute('The Gambia');

См. Документы DBI для получения дополнительной информации о связывании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...