2015-06-26 89 views
0

我在查詢中有一個Like條件,我需要篩選用戶表中的名和姓。 我的變量設置如下:在準備好的語句的字符串中使用單引號

$firstname = Input::get('firstname'); 
$lastname = Input::get('lastname'); 
$myparameters = array(); 
$filterfirst = "'%" . $firstname . "%'"; 
$filterlast = "'%" . $lastname . "%'"; 

我的SQL查詢正在建立這樣的(動態):

$sqlstring = 
        "SELECT t1.id,t1.first_name, t1.last_name, t2.function " 
        . "FROM users t1 JOIN user_details t2 " 
        . "ON t1.id = t2.user_id"; 
      if($firstname && $lastname){ 
       $sqlstring .= " WHERE lower(first_name) LIKE lower(?)" 
         . " OR lower(last_name) LIKE lower(?)"; 
       $myparameters = [$filterfirst,$filterlast]; 
      } 
      else{ 
       if($firstname){ 
        $sqlstring .= " WHERE lower(first_name) LIKE lower(?)"; 
        $myparameters = [$filterfirst]; 
       } 
       if($lastname){ 
        $sqlstring .= " WHERE lower(last_name) LIKE lower(?)"; 
        $myparameters = [$filterlast]; 
       } 
      } 

我的查詢正在使用Laravel準備好的語句執行

$resultset = DB::select($sqlstring,$myparameters); 

我已經記錄下我這樣的重要變量的值:

Log::info($sqlstring); 
Log::info($myparameters); 
Log::info('first name: ' . $filterfirst); 
Log::info('last name: ' . $filterlast); 

我看到我的記錄值是這樣的:

[2015-06-26 09:32:52] local.INFO: SELECT t1.id,t1.first_name, t1.last_name, t2.function FROM users t1 JOIN user_details t2 ON t1.id = t2.user_id WHERE lower(first_name) LIKE lower(?) OR lower(last_name) LIKE lower(?) 
[2015-06-26 09:32:52] local.INFO: array (
    0 => '\'%jer%\'', 
    1 => '\'%can%\'', 
) 
[2015-06-26 09:32:52] local.INFO: first name: '%jer%' 
[2015-06-26 09:32:52] local.INFO: last name: '%can%' 

所以我的價值觀是正確的「%耶%」和「%可以%」,這是我需要進入我的查詢中值,但當我把它們放到我的變量數組中時,它們變成'\'%jer%\''和'\'%can%\''所以執行的sql命令不能正常工作(不返回任何內容)。

有沒有人有任何想法我可以解決這個問題?所以我需要數組來包含單引號的字符串,而不添加額外的單引號或斜線,所以我只需要'%whateverIgavein%'

編輯:嘗試在我的SQL語句中使用鍵值數組和命名變量,但沒有任何差別appearantly(只要它進入它變成數組「\」%whateverIgavein%\'

+0

[這](http://stackoverflow.com/a/3446286/747609)應該把事情說清楚你...變化到'$ filterfirst ='「%'。 $ firstname。 '%'';'。 – IROEGBU

+0

@iroegbu那也不是,它不會返回任何東西,它會生成我的變量,如下所示:''%whateverIgavein%''我需要%運算符旁邊的單引號,現在它只是放在字符串裏面有雙引號,這在mysql中不起作用,我需要單引號 –

+0

我發現它,你的回答把我推向了正確的方向@iroegbu它應該是這樣的:$ filterfirst ='%'。$ firstname。 '%';非常感謝你把我推向正確的方向 –

回答

1

您正在添加引號你的變量的內容的錯誤:

$firstname = "Joe"; 
$filterfirst = "'%" . $firstname . "%'"; 
var_dump($filterfirst) //string(7) "'%Joe%'" <-- notice the extra quotes 

只包含所需的%到您的字符串:

$filterfirst = "%{$firstname}%"; 

$filterfirst = "%" . $firstname . "%"; 

將兩者結果string(5) "%Joe%"

相關問題