PDO比较2个字段

时间:2014-09-06 19:38:16

标签: php mysql pdo

可能是一个简单的案例。基本上我有一个包含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;

不能说什么发生了错误,但我确定它是#34; AND quantity = refsDone"导致它。

1 个答案:

答案 0 :(得分:2)

我在这个SQLFiddle中测试了你的查询:http://sqlfiddle.com/#!2/32ae40/8

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

  • 如果$ refid为null
  • 如果$ refid为空字符串('')
  • 如果$ min为1或更多
  • 如果$ limiter为0

我认为你应该确保你的变量是你期望它们的值,因为如果它们不是,那么查询可能会返回一个空集。

您可以通过启用记录general query log的MySQL both the prepared query and the query with parameter values included来自行解决参数化查询问题。