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

Php PDO,检查WHERE子句中未传递的条件,php,mysql,sql,ajax,pdo,Php,Mysql,Sql,Ajax,Pdo,假设一个用户想要在网上商店编辑他的订单,但同时他的订单已经被处理,并且该订单的状态设置为“已发送”。当然,他不能真正知道这一点,因为订单数据是在发送之前加载的。现在他只能得到信息“出了点问题…” 对于下面这样的场景,我只能(通过ajax)向用户发送无法更新订单的消息(数据未更改或WHERE子句中的某些值不匹配): 但我想说得更具体一些,让他知道到底发生了什么(并最终根据ajax响应修改order DOM元素) 订单号错误,或者用户号因为他的会话刚刚过期,会话[用户号]与订单号不匹配,等等。。。并

假设一个用户想要在网上商店编辑他的订单,但同时他的订单已经被处理,并且该订单的状态设置为“已发送”。当然,他不能真正知道这一点,因为订单数据是在发送之前加载的。现在他只能得到信息“出了点问题…”

对于下面这样的场景,我只能(通过ajax)向用户发送无法更新订单的消息(数据未更改或WHERE子句中的某些值不匹配):

但我想说得更具体一些,让他知道到底发生了什么(并最终根据ajax响应修改order DOM元素)

订单号错误,或者用户号因为他的会话刚刚过期,会话[用户号]与订单号不匹配,等等。。。并将相应的消息发送回用户

如何在单个查询中执行此操作?这是可能的,还是应该分别使用单个WHERE子句运行每个查询(我真正想要避免的)


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

我建议编写一个存储过程。在这种情况下,它们使您能够更好地控制返回带有多个条件的查询的错误消息。@IanBrindley您是认真的吗?@YourCommonSense是的。SP没有死。@IanBrindley你可能把SP和其他东西混淆了。@YourCommonSense一点也没有。所以,我应该把它分成两个查询,选择和更新(如果它是可更新的)。回答我的问题-PDO中没有这样的功能允许我在一个查询中检查单独的WHERE条件(在多WHERE子句中)?PDO中根本没有“功能”。PDO只是一个代理,它接受您的查询,将其发送到DB服务器,然后将返回的结果转发回来。您所说的功能是DB服务器的功能。要检查任何内容,必须使用SELECT query。要更新某些东西,你必须使用更新查询。我所说的功能是指一个带有连接的“棘手”查询,等等(不知道如何正确调用它,因为我的高级SQL和英语都很差),但为什么我要问——如果1000个用户同时操作他们的订单(我不期望,但谁知道),它会给我双倍,在您的场景中有2000个查询,因此我总是尽量减少查询,并希望有一种方法可以单独完成。但我明白你的意思,很遗憾,你关心的是这样一种假想的情况。你们必须解决手头的问题,但你们准备破坏你们试图解决它的应用程序。”但为什么我要问——如果1000个用户同时操作他们的订单(我不期望,但谁知道)“过早优化是邪恶的。如果发生这种情况,请及时处理。
   $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'));
   }
SELECT * FROM orders WHERE id=:order_id