php 盲请教这个语句是怎么改 php 执行 sql 语句

2015-10-16 23:29:14 +08:00
 juzi
UPDATE `user` SET `plan` = 'free',`u` = '0',`d` = '0',`transfer_enable` = '300' WHERE `user`.`u` + `d` >= 'transfer_enable' AND `plan` = 'pro'

大概意思就是当条件成立把 plan 为 pro 的变成 free , sql 自己可以摸索着这样写

但是 php 这样写

<?php
require_once '../lib/config.php';

$info = $db -> select('user',"*",[
"plan" => 'pro'
]);

for($i=0;$i<count($info);$i++){
if($info[$i]['u'] + $info[$i]['d'] >= $info[$i]['transfer_enable']){
$db -> update('user',[
"u"=>0,
"d"=>0,
"transfer_enable"=>1073741824,
"plan"=>'free'
]);
}
}

执行完了就把全部表都改了,我知道要添加 where 条件,不知如何修改,请不吝赐教。
2207 次点击
所在节点    问与答
4 条回复
gdtv
2015-10-17 00:08:30 +08:00
30 分钟过去了没人回答,难道这道题有什么坑?
因为你$db -> update 的时候没有 where 条件,所以全都改了。
我不知你的$db 对象是怎样封装的,猜测大概可以这样写:

require_once '../lib/config.php';
$db -> query("UPDATE `user` SET `plan` = 'free',`u` = '0',`d` = '0',`transfer_enable` = '300' WHERE `user`.`u` + `d` >= 'transfer_enable' AND `plan` = 'pro' ");
juzi
2015-10-17 07:44:24 +08:00
@gdtv 因为大家都睡觉了 233
dsphper
2015-10-17 10:26:05 +08:00
链式 db 根据推测可以这么写:
$db -> update('user',[
"u"=>0,
"d"=>0,
"transfer_enable"=>1073741824,
"plan"=>'free'
])->where(['id'=>123]) || where('id=123');
juzi
2015-10-17 14:34:46 +08:00
@dsphper 效果达到要求

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/228674

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX