php - PDO 使用 "where"子句从表中选择所有数据

标签 php mysql pdo

我想将 $variable 参数传递给 php 函数,并根据此参数从表中获取数据。该参数可以为null,这意味着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);

(或者您可以省略 bindValue() 的参数 #3 并让 PDO 自动检测数据类型)

这里有两种可能的情况:

  1. :user 为 NULL - 在 SQL 中,第一个条件匹配,返回所有行;
  2. :user 是整数 - 在 SQL 中,第二个条件匹配,返回一行(前提是 id 是唯一列)。

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

相关文章:

php - 发布到两个链接表

mysql查询疑问

php - gmail 喜欢星号按钮-jquery 问题

php - PHP 多表

php - 使用 PHP 的 PDO 将 "number of views"保存到 MySQL 中记录的表行?

php - 如何检查时间戳是否在 DST 夏令时?

PHP 接收并响应数以千计的请求——在幕后进行计算

php - 通过php将xml数据插入mysql数据库

php - 使用 PDO for mySQL 时遇到问题

php - 为什么有些 php 文件不以右括号 "?>"结尾?