Php PDO比较2个字段

Php PDO比较2个字段,php,mysql,pdo,Php,Mysql,Pdo,可能是个简单的例子。基本上,我有一个包含5个字段的数据库,显示订单及其进度: idRefs, Quantity, refsDone, refsRunning, refsUntouched 现在我想选择所有这些行,其中Quantity=refsDone(这意味着订单已经完成)。我想知道如何使用PDO实现这一点?这就是我尝试过的: $filter = $_POST['filter']; $limiter = $_POST['limiter']; $refid = $_POST['refid'];

可能是个简单的例子。基本上,我有一个包含5个字段的数据库,显示订单及其进度:

idRefs, Quantity, refsDone, refsRunning, refsUntouched
现在我想选择所有这些行,其中Quantity=refsDone(这意味着订单已经完成)。我想知道如何使用PDO实现这一点?这就是我尝试过的:

$filter = $_POST['filter'];
$limiter = $_POST['limiter'];
$refid = $_POST['refid'];
if($refid == "") $refid="%";

case("finished"):
$sql = "SELECT * FROM Orders WHERE REFID LIKE :refid AND quantity=refsDone ORDER BY dateAdded DESC LIMIT :min,:max";
$ps_orders = $db->prepare($sql);
$ps_orders->bindParam(':refid', $refid, PDO::PARAM_STR);
$ps_orders->bindParam(':min', $min, PDO::PARAM_INT);
$ps_orders->bindParam(':max', $limiter, PDO::PARAM_INT);
$ps_orders->execute();
$rowCount = $ps_orders->fetchColumn();
$data = $ps_orders->fetchAll();
break;

我不能说发生了什么错误,但我敢肯定是“和quantity=refsDone”部分导致了这一错误。

我在这个SQLFIDLE中测试了您的查询:

在以下几种情况下,查询返回一个空集:

  • 如果$refid为空
  • 如果$refid是空字符串(“”)
  • 如果$min为1或更多
  • 如果$limiter为0
我认为您应该确保您的变量是您期望的值,因为如果它们不是,查询很可能返回一个空集


通过启用MySQL,您可以自己对参数化查询进行故障排除,它会记录日志。

您可以显示示例数据和表的create语句吗?添加
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)在连接打开后立即执行。这会告诉你错误在哪里。“但我有点确定这部分“
和quantity=refsDone
”-是的……你是对的;)是
refsDone
字段名还是状态文本?如果是前者,你所做的看起来是对的。你的quantity字段可能是大写的?而且,这是纯SQL,与PDO无关。$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);@Fred ii-,是的,我假设refsDone从0开始,随着订单单位的处理,应用程序会增加refsDone。当quantity=refsDone时,订单会被完全处理,或者完全发货,或者其他任何情况。我使用AJAX请求来执行此查询,并检查行数。当其为空时,我会输出“找不到订单”,但这也不起作用,所以我认为在任何我找不到的地方都需要有一个错误。我现在要启用MySQL通用查询日志。