給個假設A$do->query( "INSERT INTO `abc` (
`public_order_id`,
`add_time`,
`status`
)
VALUES (
'{$public_order_id}',
'{$add_time}',
'已取消'
) "
);B$do->query( "INSERT INTO `abc` (
`public_order_id`,
`add_time`,
`status`
)
VALUES (
'{$public_order_id}',
'{$add_time}',
'已完成'
) "
);假設我這個動作會用到的地方兩個以上但是唯一會變得就是 statusA是「已取消」B會變成「已完成」到其他地方又會有另外的狀態其他都一樣,那這樣的 mysql query 怎麼提出?原本想說放在 function 但是不行~想到一個問題假設如果要讓function 可以用外面的值我可以用 global 來讓外面的值進來 function但是如果他不是長這樣 $abc 而是這樣 $_SESSION['id'] 和 $oder['id'] 呢?$abc = 1;function XXX() {global $abc;echo $abc; // 可顯示}
1 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
如果你这全部都是手写 SQL 那就封装成对象,依赖一下 $do 就行了,即传参的时候把 $do 也传过去
function changeOrderStatus($do,$status,$public_order_id,$add_time){ return $do->query( "INSERT INTO `abc` ( `public_order_id`, `add_time`, `status` ) VALUES ( '{$public_order_id}', '{$add_time}', '已完成' ) " ); }
一般来说 上面这样就够了 ,但是从良好的实践出发,原则上一个方法的参数不超过两个,两个以上就应该当成对象处理,所以这里简单处理一下。
假定你的 add_time 就是取得当前时间,$status有默认值。
function changeOrderStatus($db,$params){ // 这里的 $db 最好做好 类型判断 判断 if(!$db instanceof \PDO){ throw new \Exception('$db not a PDO object instance.'); } $params = array_merge([ 'status'=>'已完成',//status 默认值 'public_order_id'=>null, 'add_time'=>date('Y-m-d H:i:s'), ],$params); if(empty($params['public_order_id'])){ throw new \Exception('public_order_id is must.'); } return $db->query( vprintf('INSERT INTO `abc` (`public_order_id`,`add_time`,`status`) VALUES ("%s","%s","%s");', $params['public_order_id'] ,$params['add_time'] ,$params['status'] ) ); }// CallchangeOrderStatus($do,[ 'status'=>'已取消', 'public_order_id'=>1, ]);
- 1 回答
- 0 关注
- 416 浏览
添加回答
举报
0/150
提交
取消