-1
我在PHP腳本中面臨的一個問題,在()子句,我在POST請求如下接收來自另一頁的數據:PHP編寫的語句使用WHERE IN子句(...)子句
if(isset($_POST['mycountry'])){
if($_POST['mycountry']) $where[] = 'pays in (:pays)';
};
$ _ POST [「mycountry」]:包含由用戶選擇的國家(用戶可以選擇零個或多個國家)
如果用戶選擇國家/國家,我所關注的列和值(國家)增加IN子句。
if(isset($_POST['mycountry'])){
$tags = implode(', ', $_POST['mycountry']);
$stmt->bindParam(':pays', $tags, PDO::PARAM_BOOL);
}
當用戶選擇零或只有一個國家它工作正常,一旦用戶選擇多個它不會返回任何!
有什麼想法?
PDO參數無法綁定任意字符串來構造SQL - 它們在預準備語句中爲變量值提供1:1替換。因此,傳遞單個佔位符':pays'將導致所有逗號分隔標籤的單個字符串值一起發送到查詢中。在鏈接問題中提出了一些替代解決方案。 –
對於一個選定的項目而不是當用戶選擇多個項目時工作的問題! – MDIT
對。因爲當只選擇一個時,MySQL最終看到的查詢是WHERE支付IN('1') - - 這是有效的並返回結果。但是當選擇倍數時,MySQL會看到'WHERE支付IN('1,2,3,4,5')'注意,這是一個帶有數字和逗號的單個字符串值,而不是逗號分隔的值列表。該查詢在語法上不是無效的,但絕不會匹配您的行。你不能做你正在寫的東西。請參閱鏈接問題中的高分答案。 –