PDO,检查WHERE子句中未传递的条件

时间:2014-05-06 13:00:48

标签: php mysql sql ajax pdo

假设用户想要在网上商店中编辑他的订单,但同时他的订单已被处理,并且此订单的状态设置为"已发送"。当然,他无法真正了解这一点,因为订单数据在发送之前只加载了一段时间。现在他只能得到消息"出错了......"

通过以下方案,我只能向用户发送(通过ajax)消息,订单无法更新(数据未被更改或某些值不匹配)在WHERE子句中):

   $edit_order = $this->db->prepare('UPDATE orders SET '.$some_fields_loop.' WHERE id=:order_id AND user_id=:user_id AND product_id=:product_id AND NOT status = :ready AND NOT archived = 1');

   $edit_order->bindValue( ... );

   $edit_order->execute();

   if ($edit_order->rowCount()) 
   {
       echo(json_encode(array('status'=>'success', 'msg'=>'Your order has just been updated'));
   } 
   else 
   {
       echo(json_encode(array('status'=>'error', 'msg'=>'Your order has not been updated'));
   }

但我希望更具体,让他知道究竟发生了什么(最终根据ajax响应修改了DOM元素的顺序)。

order_id 错误,或 user_id ,因为他的会话刚刚过期且会话[ user_id ]与之不匹配订单,等等......并发回给用户相应的消息。

如何在单个查询中执行此操作?这是否可能,或者我应该单独使用单个WHERE子句运行每个查询(我真的想避免哪些)?

1 个答案:

答案 0 :(得分:1)

SELECT * FROM orders WHERE id=:order_id

首先,然后根据所需的值验证结果。