我在perl中有幾個mysql查詢,但是某些where子句的值包含單詞之間的空格,例如岡比亞。當我的腳本使用包含空格的where子句參數運行時,它會忽略第二個單詞。我想爲我的mysql查詢自動添加單引號
我想知道如何解決這個問題,即如果我輸入岡比亞它應該被視爲岡比亞不是。
我在perl中有幾個mysql查詢,但是某些where子句的值包含單詞之間的空格,例如岡比亞。當我的腳本使用包含空格的where子句參數運行時,它會忽略第二個單詞。我想爲我的mysql查詢自動添加單引號
我想知道如何解決這個問題,即如果我輸入岡比亞它應該被視爲岡比亞不是。
那麼,首先,你應該看看在應用程序中使用類似DBIx::Class而不是原始SQL。
但是,如果您遇到原始SQL,那麼(假設您至少使用DBI)應該在SQL語句中使用綁定點。這將爲您處理所有報價問題。
$sth = $dbh->prepare('select something from somewhere where country = ?');
$sth->execute('The Gambia');
有關綁定的更多信息,請參閱DBI docs。
如果您使用的是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});
@bvr @davorg感謝您的回覆,但爲了讓您瞭解更多,只需附上一段代碼即可。我正在做這樣的事情,但將其分配給一個變量,我的查詢也包含一個類似的子句。下面是代碼$ sel = $ dbh-> prepare(「SELECT'id','date' as day,'time','one','one_r','two','two_r',league,country,details FROM football WHERE(one like trimming(?)or two LIKE TRIM(?))$ country $ league $ date $ limit「); \t \t \t $ sel-> execute(「%$ command%」,「%$ command%」); $ row = $ sel-> fetchrow_hashref(); $ SEL->結束(); – 2011-02-24 09:22:59
@Sheriffo Ceesay - 請將代碼添加到您的問題。還請提供代碼,您正在建立'$ country'和'$ league'。 – bvr 2011-02-24 09:27:40
$ sel = $ dbh-> prepare(「SELECT id,date as day,time,one,one_r,two,two_r,league,country,details FROM football WHERE(one LIKE TRIM(?)or two LIKE TRIM(?) )$ country $ league $ date $ limit「); $ SEL->執行( 「%$命令%」, 「%$命令%」); $ row = $ sel-> fetchrow_hashref(); $ SEL->結束(); – 2011-02-24 09:29:11