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%\'
[這](http://stackoverflow.com/a/3446286/747609)應該把事情說清楚你...變化到'$ filterfirst ='「%'。 $ firstname。 '%'';'。 – IROEGBU
@iroegbu那也不是,它不會返回任何東西,它會生成我的變量,如下所示:''%whateverIgavein%''我需要%運算符旁邊的單引號,現在它只是放在字符串裏面有雙引號,這在mysql中不起作用,我需要單引號 –
我發現它,你的回答把我推向了正確的方向@iroegbu它應該是這樣的:$ filterfirst ='%'。$ firstname。 '%';非常感謝你把我推向正確的方向 –