當使用 PDO 執行帶有使用數組的 IN子句的語句時對於它的值,為什麼這段程式碼回傳一個意外的結果:
$in_array = array(1, 2, 3); $in_values = implode(',', $in_array); $my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (:in_values)"); $my_result->execute(array(':in_values' => $in_values));
PDO 難以處理使用值數組佔位符的IN 子句。要解決此問題,您需要動態建立一串佔位符並將其插入查詢中,同時單獨綁定數組值。
對於位置佔位符:
$in = str_repeat('?,', count($in_array) - 1) . '?'; $sql = "SELECT * FROM my_table WHERE my_value IN ($in)"; $stm = $db->prepare($sql); $stm->execute($in_array);
對於命名佔位符:
// collect parameters for query $params = ["foo" => "foo", "bar" => "bar"]; // prepare IN clause placeholders and values $ids = [1,2,3]; $in = ""; $i = 0; foreach ($ids as $item) { $key = ":id" . $i++; $in .= ($in ? "," : "") . $key; $in_params[$key] = $item; } // construct query and execute $sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar"; $stm = $db->prepare($sql); $stm->execute(array_merge($params, $in_params));
以上是為什麼在使用具有佔位符數組的 IN 子句時 PDO 會傳回意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!