Я пытаюсь передать массив в оператор SELECT * FROM table WHERE IN()
. Я ожидаю 3 результата. но вместо этого я получил 2 результата.php Связать массив с IN()
Я осознаю тот же вопрос ниже в 2 сообщений
Can I bind an array to an IN() condition?
и
MySQL WHERE IN() + AND , PDO returns only one row
Однако я все еще учусь PHP PDO, таким образом, я не понимаю, код достаточно, чтобы фигуры как перепрофилировать свой код на мой код.
Надеюсь, кто-то может указать, где я ошибся. потому что я получаю частичные результаты от оператора select in. Я подозреваю, что не прошел массив в IN() правильно.
ниже PHP код моей страницы Controler
$customer_ids = array(1,2,3,4,5,6,7);
//in actual case I get array from another query.
$customer_id = implode(',',$customer_ids);
//add comma to the array
$template->orders = $rephome->getOrder($customer_id);
//passing the imploded array into my Model page with class named rephome,
//call on the method of getOrder, which is the select query
ниже моей модели страницы.
public function getOrder($customer_id){
$this->db->query("SELECT * FROM orders WHERE customer_id_fk IN(.$customer_id.)");
$results = $this->db->resultset();
return $results;
Ниже то, что находится в моем классе базы данных
public function query($query) {
$this->stmt = $this->dbh->prepare($query);
}
public function bind($param, $value, $type = null) {
if (is_null ($type)) {
switch (true) {
case is_int ($value) :
$type = PDO::PARAM_INT;
break;
case is_bool ($value) :
$type = PDO::PARAM_BOOL;
break;
case is_null ($value) :
$type = PDO::PARAM_NULL;
break;
default :
$type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue ($param, $value, $type);
}
public function execute(){
return $this->stmt->execute();
}
public function resultset(){
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_OBJ);
}
Создайте строку PDO с таким количеством заполнителей, как элементы в массиве. Привяжите каждый заполнитель соответствующим значением. – user2864740
В любом случае a/«проблема» есть '' .. IN (. $ Customer_id.) "' Приводит к '.. IN (.1,2,3,4,5,6,7.)', Который недействителен SQL - '.' является буквально внутри строки. Сообщение об ошибке было бы сказано так же. – user2864740
Я думаю, вы просто решили мою проблему. удалив точки. Я получил правильный результат. – codenoob