【问题标题】:two condition for where Clause in SQLSQL中where子句的两个条件
【发布时间】:2021-05-13 20:28:30
【问题描述】:

我想用我的 php 代码执行一个 sql 查询,但它是错误的,我不知道我的问题是什么!
$end_type = $executed[end_type];
$start_type = $executed[start_type];
$sql = "SELECT * FROM `wants` WHERE ((`car`=? AND $start_type=? AND $end_type=?) OR (`car`=? AND $start_type=? AND $end_type='all'))";
$query = $con->prepare($sql);
$query->bindValue(1, $executed[car]);
$query->bindValue(2, $executed[start_place]);
$query->bindValue(3, $executed[end_place]);
$query->execute();
$results = $query->fetchall();
sendmsg($user_id, $results);

sendmsg 是我的按摩发送函数,它不返回任何数组,即使是空数组! 为什么?我的解决方案是什么?

【问题讨论】:

  • 任何错误?使用$con->error 获取错误并回显它。
  • 您的代码以其当前形式不会存储甚至转储sendmsg() 返回的值。执行是否到达那个函数?

标签: php mysql sql pdo


【解决方案1】:

这里的主要问题似乎是您在准备好的语句中有五个? 占位符,但只绑定了 三个 值。可能有一些方法可以回收 PHP 中的绑定值,但在这种情况下,我会将您的查询改写为:

SELECT *
FROM wants
WHERE car = ? AND start_type = ? AND end_type IN (?, 'all');

更新的 PHP 代码:

$sql = "SELECT * FROM wants WHERE car = ? AND start_type = ? AND end_type IN (?, 'all')";
$query = $con->prepare($sql);
$query->bindValue(1, $executed[car]);
$query->bindValue(2, $executed[start_place]);
$query->bindValue(3, $executed[end_place]);
$query->execute();
$results = $query->fetchall();

【讨论】:

    猜你喜欢
    • 2019-11-16
    • 2019-02-09
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    相关资源
    最近更新 更多