gpt4 book ai didi

php 绑定(bind)数组到 IN()

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:49 25 4
gpt4 key购买 nike

我正在尝试将数组传递到 SELECT * FROM table WHERE IN() 语句中。我期待 3 个结果。但我得到了 2 个结果。

我在以下 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代码

$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);
}

最佳答案

您没有绑定(bind)数组。您正在将数组转换为字符串,然后绑定(bind)该字符串。绑定(bind)参数只能表示单个值,而不是值列表,因此您的内爆/绑定(bind)版本在功能上与

SELECT ... foo IN ('1,2,3')

它的执行完全一样

SELECT ... foo = '1,2,3'                   

代替

SELECT ... IN (1,2,3)
^-^-^--- three separate values

用一个占位符根本无法实现您想要的。您需要动态构建查询(每个值一个占位符),然后将数组传递给查询调用,例如

$temp = array_fill(1, count($customer_ids), '?');
$in_arg = implode(',', $temp);
$sql = "SELECT ... IN ($in_arg)";
$stmt = $db->prepare(sql);
$res = $stmt->execute($customer_ids);

这会产生一个类似的查询字符串

SELECT ... IN (?,?,?,....)

为您要绑定(bind)的每个值使用一个占位符。

关于php 绑定(bind)数组到 IN(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37553812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com