Intereting Posts

PDO и SQL IN

Я использую сиквел для поиска, подобный этому, используя 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; } } 

он не принимает цитируемые переменные, я думаю, что он подавляет, в таких случаях, как справиться с этим.

Solutions Collecting From Web of "PDO и SQL IN"

При использовании подготовленных операторов-заполнителей (привязка параметров) в общем случае каждое вхождение заполнителя содержит ровно одну переменную.

Вы пытаетесь передать несколько. То, что происходит, в основном состоит в том, что ваши параметры экранированы: ваши : состояния заменяются '' '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);