Я использую сиквел для поиска, подобный этому, используя PDO
$states = "'SC','SD'"; $sql = "select * from mytable where states in (:states)"; $params = array(':states'=>$states);
и я использую свою функцию
$result = $this->selectArrayAssoc($sql, $params);
где моя функция selectArrayAssoc следующая
public function selectArrayAssoc($sql, $params = array()) { try { $sth = $this->db->prepare($sql); $sth->execute($params); $result = $sth->setFetchMode(PDO::FETCH_ASSOC); return $sth->fetchAll(); } catch(PDOException $e) { print $e->getMessage(); //Log this to a file later when in production exit; } }
он не принимает цитируемые переменные, я думаю, что он подавляет, в таких случаях, как справиться с этим.
При использовании подготовленных операторов-заполнителей (привязка параметров) в общем случае каждое вхождение заполнителя содержит ровно одну переменную.
Вы пытаетесь передать несколько. То, что происходит, в основном состоит в том, что ваши параметры экранированы: ваши : состояния заменяются '' 'SC' ',' 'SD' '' или '\' SC \ ',' 'SD \' ' внутренне, а не только с необработанные «SC», «SD», которые вы хотите.
pinkgothic абсолютно прав. Но я думаю, что у вас возникла проблема, что у вас есть массив «состояний» и вы хотите работать с этим массивом. Вы должны подготовить Placeholder для каждого значения в запросе.
$states = array('SC','SD'); $phArray = array(); $valArray = array(); foreach($ids AS $key=>$value){ array_push($phArray, ':PH' . $key); $valArray[':PH' . $key] = $value; } $sql = 'select * from mytable where states in (' . implode(',', $phArray) . ')'; $params = array($valArray); $result = $this->selectArrayAssoc($sql, $params);