我想把$variable参数传递给php函数,并根据这个参数从表中获取数据。这个参数可以是空的,这意味着db请求应该从表中获取所有数据,或者它可以是int值。下面是我尝试的代码:

$stmt = $this->_db->prepare("SELECT * FROM ki_cities
                              WHERE id IS NULL OR id = :user");
$stmt->bindValue(':user',$variable,PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

此查询不返回任何行。
对于那些被我的问题搞糊涂的人,这里有一个隐含的问题。
我想要sql查询:
 SELECT * FROM ki_cities WHERE id = *

此查询应执行以下操作:
 SELECT * FROM ki_cities

我想我的问题很清楚。
=======================================
如果有人感兴趣,这里是我扭曲的“解决方案”:
$que = "SELECT * FROM ";
            $que = $que . " ki_students where season=4";
            if($type!=null) { $que = $que . " and type =".$type; }
            if($city!=null) { $que = $que . " and city =".$city; }
            $stmt = $this->_db->prepare($que);
            $stmt->execute();
             $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
             return $result;

最佳答案

如果我理解你的“问题”,代码可以是:

$stmt = $this->_db->prepare('SELECT * FROM `ki_cities` WHERE ((:user IS NULL) OR (`id` = :user));');
$stmt->bindValue(':user', $variable, is_null($variable) ? PDO::PARAM_NULL : PDO::PARAM_INT);

(或者可以省略参数#3到bindValue(),让PDO自动检测数据类型)
这里有两种可能的情况:
:user为空-在SQL中,第一个条件匹配,返回所有行;
:user is integer-在SQL中,第二个条件匹配,返回一行(前提是id是唯一的列)。

关于php - PDO使用“where”子句从表中选择所有数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28439070/

10-11 01:57
查看更多