正在显示
15 个修改的文件
包含
152 行增加
和
63 行删除
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | -var_dump(str_starts_with('a_sdf','_')); | ||
4 | 3 | ||
5 | 4 | ||
6 | //use Model\listsSql; | 5 | //use Model\listsSql; |
7 | 6 | ||
8 | //include_once __DIR__."/../vendor/autoload.php"; | 7 | //include_once __DIR__."/../vendor/autoload.php"; |
9 | - | 8 | +// |
9 | +//print_r(redis()->incr('asdfasdfasdfasdf',600)); | ||
10 | 10 | ||
11 | //$ids = db()->all('select `id` from `'.\Model\emailSql::$table.'` limit 1000 offset 0'); | 11 | //$ids = db()->all('select `id` from `'.\Model\emailSql::$table.'` limit 1000 offset 0'); |
12 | //print_r($ids); | 12 | //print_r($ids); |
@@ -52,6 +52,8 @@ function start(){ | @@ -52,6 +52,8 @@ function start(){ | ||
52 | if(!$id){ | 52 | if(!$id){ |
53 | co::sleep(1); | 53 | co::sleep(1); |
54 | }else{ | 54 | }else{ |
55 | + // 占用当前的id,占用2小时 | ||
56 | + redis()->add('just_sync_'.$id,time(),7200); | ||
55 | // 启动一个协程 | 57 | // 启动一个协程 |
56 | go(function () use (&$start_num,$worker_id,$id){ | 58 | go(function () use (&$start_num,$worker_id,$id){ |
57 | $start_num++; | 59 | $start_num++; |
@@ -71,10 +73,19 @@ function start(){ | @@ -71,10 +73,19 @@ function start(){ | ||
71 | } | 73 | } |
72 | 74 | ||
73 | // 协程完成后执行的函数 | 75 | // 协程完成后执行的函数 |
74 | - co::defer(function () use (&$start_num,$worker_id){ | 76 | + co::defer(function () use (&$start_num,$worker_id,$id){ |
75 | // _echo('正常关闭进程('.$worker_id.')下的协程('.co::getCid().')'); | 77 | // _echo('正常关闭进程('.$worker_id.')下的协程('.co::getCid().')'); |
76 | $start_num--; | 78 | $start_num--; |
79 | + // 消除占用 | ||
80 | + redis()->delete('just_sync_'.$id); | ||
81 | + // 写入日志 | ||
77 | \Lib\Log::getInstance()->write(); | 82 | \Lib\Log::getInstance()->write(); |
83 | + | ||
84 | + // 关闭数据库链接 | ||
85 | + db()->close(); | ||
86 | + // 关闭redis链接 | ||
87 | + redis()->close(); | ||
88 | + | ||
78 | }); | 89 | }); |
79 | 90 | ||
80 | }); | 91 | }); |
@@ -55,6 +55,9 @@ abstract class Base { | @@ -55,6 +55,9 @@ abstract class Base { | ||
55 | if(empty($data)){ | 55 | if(empty($data)){ |
56 | app()->e('email_request_required'); | 56 | app()->e('email_request_required'); |
57 | } | 57 | } |
58 | + if($data['pwd_error']){ | ||
59 | + app()->e('imap_password_error',403); | ||
60 | + } | ||
58 | } | 61 | } |
59 | 62 | ||
60 | if($filed == '*'){ | 63 | if($filed == '*'){ |
@@ -3,6 +3,7 @@ | @@ -3,6 +3,7 @@ | ||
3 | namespace Controller; | 3 | namespace Controller; |
4 | 4 | ||
5 | 5 | ||
6 | +use Lib\Err; | ||
6 | use Lib\Mail\Mail; | 7 | use Lib\Mail\Mail; |
7 | use Lib\Mail\MailFun; | 8 | use Lib\Mail\MailFun; |
8 | use Model\folderSql; | 9 | use Model\folderSql; |
@@ -23,16 +24,38 @@ class Folder extends Base { | @@ -23,16 +24,38 @@ class Folder extends Base { | ||
23 | * @time 2023/2/18 10:58 | 24 | * @time 2023/2/18 10:58 |
24 | */ | 25 | */ |
25 | public function lists(){ | 26 | public function lists(){ |
27 | + | ||
28 | + try { | ||
29 | + $emails = $this->getEmails(); | ||
30 | + }catch (Err $e){ | ||
31 | + $emails = [$this->getEmail()]; | ||
32 | + } | ||
33 | + | ||
34 | + $emails = array_column($emails,'email','id'); | ||
35 | + | ||
26 | // 查询 | 36 | // 查询 |
27 | $folders = db()->all( | 37 | $folders = db()->all( |
28 | \Model\folderSql::all( | 38 | \Model\folderSql::all( |
29 | - $this->getEmail('id'), | ||
30 | - '`id`,`folder`,`pid`,`exsts`,`unseen`' | 39 | + array_keys($emails), |
40 | + '`id`,`folder`,`pid`,`exsts`,`unseen`,`email_id`' | ||
31 | ) | 41 | ) |
32 | ); | 42 | ); |
33 | 43 | ||
34 | - // 转tree | ||
35 | - $folders = list_to_tree($folders); | 44 | + $data = []; |
45 | + foreach ($folders as $k=>$folder){ | ||
46 | + if (empty($data[$emails[$folder['email_id']]])){ | ||
47 | + $data[$emails[$folder['email_id']]] = []; | ||
48 | + } | ||
49 | + $data[$emails[$folder['email_id']]][$k] = $folder; | ||
50 | + unset($data[$emails[$folder['email_id']]][$k]['email_id']); | ||
51 | + } | ||
52 | + $folders = $data;$data = null; | ||
53 | + | ||
54 | + foreach ($folders as $f=>$folder){ | ||
55 | + // 转tree | ||
56 | + $folders[$f] = list_to_tree($folder); | ||
57 | + } | ||
58 | + | ||
36 | 59 | ||
37 | return $folders; | 60 | return $folders; |
38 | } | 61 | } |
@@ -28,30 +28,42 @@ class Home extends Base { | @@ -28,30 +28,42 @@ class Home extends Base { | ||
28 | $page = app()->request('page',1,'intval'); | 28 | $page = app()->request('page',1,'intval'); |
29 | $page = $page ? $page : 1; | 29 | $page = $page ? $page : 1; |
30 | 30 | ||
31 | - $size = app()->request('size',20,'intval'); | ||
32 | - $size = $size ? $size : 1; | 31 | + $limit = app()->request('limit',20,'intval'); |
32 | + $limit = $limit ? $limit : 1; | ||
33 | + | ||
34 | + // 指定id | ||
35 | + $ids = app()->request('mail_id'); | ||
36 | + $ids = is_array($ids) ? $ids : [$ids]; | ||
37 | + foreach ($ids as $i=>$d){ | ||
38 | + if(!is_numeric($d)){ | ||
39 | + unset($ids[$i]); | ||
40 | + } | ||
41 | + } | ||
33 | 42 | ||
34 | // 邮件文件夹的id | 43 | // 邮件文件夹的id |
35 | - $folder_id = app()->request('folder_id'); | 44 | + $folder_id = (int) app()->request('folder_id'); |
45 | + // 附件 | ||
46 | + $attachment = app()->request('attachment'); | ||
47 | + | ||
48 | + $where = ['email_id'=>$this->getEmails('id')]; | ||
49 | + if($folder_id) $where['folder_id'] = $folder_id; | ||
50 | + if($ids) $where['id'] = $ids; | ||
51 | + if($attachment) $where['is_file'] = 1; //附件 | ||
36 | 52 | ||
37 | $lists = db()->all( | 53 | $lists = db()->all( |
38 | listsSql::lists( | 54 | listsSql::lists( |
39 | - $this->getEmails('id'), | 55 | + dbWhere($where), |
40 | $page, | 56 | $page, |
41 | - $size, | ||
42 | - (int) $folder_id | 57 | + $limit |
43 | ) | 58 | ) |
44 | ); | 59 | ); |
45 | 60 | ||
46 | // 总数 | 61 | // 总数 |
47 | $total = db()->count( | 62 | $total = db()->count( |
48 | - listsSql::listCount( | ||
49 | - $this->getEmails('id'), | ||
50 | - (int) $folder_id | ||
51 | - ) | 63 | + listsSql::listCount(dbWhere($where)) |
52 | ); | 64 | ); |
53 | 65 | ||
54 | - app()->_json(listsPage($lists,$total,$page,$size)); | 66 | + app()->_json(listsPage($lists,$total,$page,$limit)); |
55 | 67 | ||
56 | } | 68 | } |
57 | 69 | ||
@@ -112,18 +124,18 @@ class Home extends Base { | @@ -112,18 +124,18 @@ class Home extends Base { | ||
112 | */ | 124 | */ |
113 | public function sync(){ | 125 | public function sync(){ |
114 | 126 | ||
115 | - $where['email'] = web_request_emails(); | 127 | + $emails = web_request_emails(); |
116 | 128 | ||
117 | - if(empty($where)){ | 129 | + if(empty($emails)){ |
118 | app()->e('sync_request_param_error'); | 130 | app()->e('sync_request_param_error'); |
119 | }else{ | 131 | }else{ |
120 | // 查询id | 132 | // 查询id |
121 | - $datas = db()->all(emailSql::getValues($where,'`id`,`email`,`pwd_error`')); | ||
122 | - foreach ($datas as &$v){ | 133 | + $datas = db()->all(emailSql::getValues(['email'=>$emails],'`id`,`email`,`pwd_error`')); |
134 | + foreach ($datas as $k=>$v){ | ||
123 | if(!$v['pwd_error']){ | 135 | if(!$v['pwd_error']){ |
124 | redis()->rPush('sync_email_lists', $v['id']); | 136 | redis()->rPush('sync_email_lists', $v['id']); |
125 | } | 137 | } |
126 | - unset($v['id']); | 138 | + $datas[$k]['have_new'] = redis()->getDel('have_new_mail_'.$v['id']); |
127 | } | 139 | } |
128 | // 返回成功的参数值 | 140 | // 返回成功的参数值 |
129 | app()->_json($datas); | 141 | app()->_json($datas); |
@@ -68,6 +68,7 @@ class Login { | @@ -68,6 +68,7 @@ class Login { | ||
68 | $ret = db()->update(emailSql::$table,$data,dbWhere(['id'=>$id])); | 68 | $ret = db()->update(emailSql::$table,$data,dbWhere(['id'=>$id])); |
69 | }else{ | 69 | }else{ |
70 | // 新增 | 70 | // 新增 |
71 | + $data['email'] = $formData['email']; | ||
71 | $ret = db()->insert(emailSql::$table,$data); | 72 | $ret = db()->insert(emailSql::$table,$data); |
72 | 73 | ||
73 | if($ret){ | 74 | if($ret){ |
@@ -81,9 +82,7 @@ class Login { | @@ -81,9 +82,7 @@ class Login { | ||
81 | 82 | ||
82 | 83 | ||
83 | if($ret){ | 84 | if($ret){ |
84 | - app()->_json([ | ||
85 | - 'token' => $data['token'] | ||
86 | - ]); | 85 | + app()->_json(db()->first(emailSql::first($formData['email'],'`id`,`email`,`last_sync_time`'))); |
87 | } | 86 | } |
88 | 87 | ||
89 | app()->e('login_error'); | 88 | app()->e('login_error'); |
@@ -181,7 +181,7 @@ function web_request_emails():array { | @@ -181,7 +181,7 @@ function web_request_emails():array { | ||
181 | $emails = app()->request('emails'); | 181 | $emails = app()->request('emails'); |
182 | $emails = is_array($emails) ? $emails : [$emails]; | 182 | $emails = is_array($emails) ? $emails : [$emails]; |
183 | foreach ($emails as $k=>$email){ | 183 | foreach ($emails as $k=>$email){ |
184 | - if(!\Lib\Verify::sEmail($email)){ | 184 | + if(!$email || !\Lib\Verify::sEmail($email)){ |
185 | unset($emails[$k]); | 185 | unset($emails[$k]); |
186 | } | 186 | } |
187 | } | 187 | } |
@@ -203,7 +203,7 @@ function web_request_emails():array { | @@ -203,7 +203,7 @@ function web_request_emails():array { | ||
203 | function web_request_email():string { | 203 | function web_request_email():string { |
204 | $email = app()->request('email'); | 204 | $email = app()->request('email'); |
205 | 205 | ||
206 | - if(!\Lib\Verify::sEmail($email)){ | 206 | + if(!$email || !\Lib\Verify::sEmail($email)){ |
207 | app()->e('email_request_required'); | 207 | app()->e('email_request_required'); |
208 | } | 208 | } |
209 | 209 |
@@ -17,9 +17,10 @@ return [ | @@ -17,9 +17,10 @@ return [ | ||
17 | 'server_error' => '服务器异常', | 17 | 'server_error' => '服务器异常', |
18 | 18 | ||
19 | 'login_error' => '登录失败', | 19 | 'login_error' => '登录失败', |
20 | - 'login_error_imap' => '登录失败,请检查密码/是否开启imap服务', | 20 | + 'login_error_imap' => '登录失败,请检查密码是否正确或者是否开启imap/smtp服务', |
21 | 'token_verify_error' => '令牌验证失败', | 21 | 'token_verify_error' => '令牌验证失败', |
22 | 'token_verify_notfound' => '令牌验证失败.', | 22 | 'token_verify_notfound' => '令牌验证失败.', |
23 | + 'imap_password_error' => '密码错误请重新登录.', | ||
23 | 24 | ||
24 | 'param_request_error' => '参数异常', | 25 | 'param_request_error' => '参数异常', |
25 | 'folder_create_name_error' => '文件夹名称只能输入中文英文数字', | 26 | 'folder_create_name_error' => '文件夹名称只能输入中文英文数字', |
@@ -276,10 +276,14 @@ class DbPool { | @@ -276,10 +276,14 @@ class DbPool { | ||
276 | * 结束 | 276 | * 结束 |
277 | */ | 277 | */ |
278 | public function __destruct(){ | 278 | public function __destruct(){ |
279 | - $this->client = null; | 279 | + $this->close(); |
280 | } | 280 | } |
281 | 281 | ||
282 | 282 | ||
283 | + public function close(){ | ||
284 | + $this->client = null; | ||
285 | + } | ||
286 | + | ||
283 | 287 | ||
284 | 288 | ||
285 | } | 289 | } |
@@ -178,6 +178,9 @@ class Mail { | @@ -178,6 +178,9 @@ class Mail { | ||
178 | // 循环 | 178 | // 循环 |
179 | $results = $this->client->fetchHeader($msgno); | 179 | $results = $this->client->fetchHeader($msgno); |
180 | if($results){ | 180 | if($results){ |
181 | + // 表示已存在新邮件 | ||
182 | + redis()->incr('have_new_mail_'.$email_id,120); | ||
183 | + | ||
181 | // 批量插入 | 184 | // 批量插入 |
182 | foreach ($results as $key=>$result){ | 185 | foreach ($results as $key=>$result){ |
183 | $header = $result['HEADER.FIELDS']; | 186 | $header = $result['HEADER.FIELDS']; |
@@ -138,22 +138,38 @@ class RedisPool { | @@ -138,22 +138,38 @@ class RedisPool { | ||
138 | /** | 138 | /** |
139 | * 自增 | 139 | * 自增 |
140 | * @param $key | 140 | * @param $key |
141 | + * @param null $ttl | ||
141 | * @return int | 142 | * @return int |
142 | * @author:dc | 143 | * @author:dc |
143 | * @time 2023/2/17 15:29 | 144 | * @time 2023/2/17 15:29 |
144 | */ | 145 | */ |
145 | - public function incr($key){ | 146 | + public function incr($key, $ttl = null){ |
147 | + if($ttl){ | ||
148 | + return $this->client->eval( | ||
149 | + "local x = redis.call('incr',KEYS[1]);redis.call('expire',KEYS[1],ARGV[1]);return x", | ||
150 | + [$key, $ttl], | ||
151 | + 1 | ||
152 | + ); | ||
153 | + } | ||
146 | return $this->client->incr($key); | 154 | return $this->client->incr($key); |
147 | } | 155 | } |
148 | 156 | ||
149 | /** | 157 | /** |
150 | * 自减 | 158 | * 自减 |
151 | * @param $key | 159 | * @param $key |
160 | + * @param null $ttl | ||
152 | * @return int | 161 | * @return int |
153 | * @author:dc | 162 | * @author:dc |
154 | - * @time 2023/2/17 15:29 | 163 | + * @time 2023/3/16 11:19 |
155 | */ | 164 | */ |
156 | - public function decr($key){ | 165 | + public function decr($key,$ttl = null){ |
166 | + if($ttl){ | ||
167 | + return $this->client->eval( | ||
168 | + "local x = redis.call('decr',KEYS[1]);redis.call('expire',KEYS[1],ARGV[1]);return x", | ||
169 | + [$key, $ttl], | ||
170 | + 1 | ||
171 | + ); | ||
172 | + } | ||
157 | return $this->client->decr($key); | 173 | return $this->client->decr($key); |
158 | } | 174 | } |
159 | 175 | ||
@@ -169,6 +185,20 @@ class RedisPool { | @@ -169,6 +185,20 @@ class RedisPool { | ||
169 | return $this->client->del($key); | 185 | return $this->client->del($key); |
170 | } | 186 | } |
171 | 187 | ||
188 | + /** | ||
189 | + * 获取值并删除 | ||
190 | + * @param $key | ||
191 | + * @return mixed | ||
192 | + * @author:dc | ||
193 | + * @time 2023/3/16 11:36 | ||
194 | + */ | ||
195 | + public function getDel($key){ | ||
196 | + return $this->client->eval( | ||
197 | + "local x = redis.call('get',KEYS[1]);if x then redis.call('del',KEYS[1]) end return x", | ||
198 | + [$key], | ||
199 | + 1 | ||
200 | + ); | ||
201 | + } | ||
172 | 202 | ||
173 | 203 | ||
174 | /** | 204 | /** |
@@ -196,14 +226,7 @@ class RedisPool { | @@ -196,14 +226,7 @@ class RedisPool { | ||
196 | 226 | ||
197 | public function __destruct() | 227 | public function __destruct() |
198 | { | 228 | { |
199 | - // TODO: Implement __destruct() method. | ||
200 | - try { | ||
201 | - if($this->client->ping()){ | ||
202 | - $this->client->close(); | ||
203 | - } | ||
204 | - }catch (\RedisException $e){} | ||
205 | - | ||
206 | - $this->client = null; | 229 | + $this->close(); |
207 | } | 230 | } |
208 | 231 | ||
209 | 232 | ||
@@ -228,7 +251,21 @@ class RedisPool { | @@ -228,7 +251,21 @@ class RedisPool { | ||
228 | } | 251 | } |
229 | 252 | ||
230 | 253 | ||
254 | + /** | ||
255 | + * 关闭 | ||
256 | + * @author:dc | ||
257 | + * @time 2023/3/16 13:42 | ||
258 | + */ | ||
259 | + public function close(){ | ||
260 | + // TODO: Implement __destruct() method. | ||
261 | + try { | ||
262 | + if($this->client->ping()){ | ||
263 | + $this->client->close(); | ||
264 | + } | ||
265 | + }catch (\RedisException $e){} | ||
231 | 266 | ||
267 | + $this->client = null; | ||
268 | + } | ||
232 | 269 | ||
233 | 270 | ||
234 | 271 |
@@ -35,7 +35,7 @@ class Verify { | @@ -35,7 +35,7 @@ class Verify { | ||
35 | * @author:dc | 35 | * @author:dc |
36 | * @time 2023/3/10 16:04 | 36 | * @time 2023/3/10 16:04 |
37 | */ | 37 | */ |
38 | - public static function sEmail($email){ | 38 | + public static function sEmail(string $email){ |
39 | return preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/',$email); | 39 | return preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/',$email); |
40 | } | 40 | } |
41 | 41 | ||
@@ -57,7 +57,7 @@ class Verify { | @@ -57,7 +57,7 @@ class Verify { | ||
57 | * @author:dc | 57 | * @author:dc |
58 | * @time 2023/3/13 10:59 | 58 | * @time 2023/3/13 10:59 |
59 | */ | 59 | */ |
60 | - public static function sDomain($domain){ | 60 | + public static function sDomain(string $domain){ |
61 | return preg_match('/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?/',$domain); | 61 | return preg_match('/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?/',$domain); |
62 | } | 62 | } |
63 | 63 | ||
@@ -68,7 +68,7 @@ class Verify { | @@ -68,7 +68,7 @@ class Verify { | ||
68 | * @author:dc | 68 | * @author:dc |
69 | * @time 2023/3/13 11:00 | 69 | * @time 2023/3/13 11:00 |
70 | */ | 70 | */ |
71 | - public static function sUrl($url){ | 71 | + public static function sUrl(string $url){ |
72 | return preg_match('/[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$/',$url); | 72 | return preg_match('/[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$/',$url); |
73 | } | 73 | } |
74 | 74 |
@@ -15,13 +15,13 @@ class folderSql { | @@ -15,13 +15,13 @@ class folderSql { | ||
15 | 15 | ||
16 | /** | 16 | /** |
17 | * 所有文件夹 | 17 | * 所有文件夹 |
18 | - * @param int $email_id | 18 | + * @param int|array $email_id |
19 | * @return string | 19 | * @return string |
20 | * @author:dc | 20 | * @author:dc |
21 | * @time 2023/2/18 9:22 | 21 | * @time 2023/2/18 9:22 |
22 | */ | 22 | */ |
23 | - public static function all(int $email_id, $field = '`id`,`folder`,`pid`,`origin_folder`,`last_sync_time`'):string { | ||
24 | - return "select {$field} from `".static::$table."` where `email_id` = {$email_id} order by `id` asc"; | 23 | + public static function all(int|array $email_id, $field = '`id`,`folder`,`pid`,`origin_folder`,`last_sync_time`'):string { |
24 | + return "select {$field} from `".static::$table."` where ".dbWhere(['email_id'=>$email_id])." order by `id` asc"; | ||
25 | } | 25 | } |
26 | 26 | ||
27 | 27 |
@@ -20,37 +20,31 @@ class listsSql { | @@ -20,37 +20,31 @@ class listsSql { | ||
20 | 20 | ||
21 | /** | 21 | /** |
22 | * 查询列表 | 22 | * 查询列表 |
23 | - * @param int|array $email_id | 23 | + * @param string $where |
24 | * @param int $p | 24 | * @param int $p |
25 | * @param int $size | 25 | * @param int $size |
26 | - * @param int $folder_id | ||
27 | * @return string | 26 | * @return string |
28 | * @author:dc | 27 | * @author:dc |
29 | - * @time 2023/3/10 15:24 | 28 | + * @time 2023/3/16 18:11 |
30 | */ | 29 | */ |
31 | - public static function lists(int|array $email_id, int $p, int $size, int $folder_id = 0){ | 30 | + public static function lists(string $where, int $p, int $size){ |
32 | 31 | ||
33 | - $where = ['email_id'=>$email_id]; | ||
34 | - if($folder_id) $where['folder_id'] = $folder_id; | 32 | + $filed = '`id`,`uid`,`msgno`,`subject`,`from`,`from_name`,`to`,`date`,`size`,`recent`,`flagged`,`answered`,`deleted`,`seen`,`draft`,`udate`,`folder_id`,`is_file`,`cc`,`bcc`,`description`'; |
35 | 33 | ||
36 | - $filed = '`id`,`uid`,`msgno`,`subject`,`from`,`to`,`date`,`size`,`recent`,`flagged`,`answered`,`deleted`,`seen`,`draft`,`udate`,`folder_id`,`is_file`,`cc`,`bcc`'; | ||
37 | - | ||
38 | - return "select {$filed} from `".static::$table."` where ".dbWhere($where)." order by `udate` desc limit {$size} offset ".(($p-1)*30); | 34 | + return "select {$filed} from `".static::$table."` where ".$where." order by `udate` desc limit {$size} offset ".(($p-1)*30); |
39 | 35 | ||
40 | } | 36 | } |
41 | 37 | ||
42 | /** | 38 | /** |
43 | * 统计列表 | 39 | * 统计列表 |
44 | - * @param int|array $email_id | ||
45 | - * @param int $folder_id | 40 | + * @param string $where |
46 | * @return string | 41 | * @return string |
47 | * @author:dc | 42 | * @author:dc |
48 | - * @time 2023/3/10 15:26 | 43 | + * @time 2023/3/16 18:10 |
49 | */ | 44 | */ |
50 | - public static function listCount(int|array $email_id, int $folder_id = 0){ | ||
51 | - $where = ['email_id'=>$email_id]; | ||
52 | - if($folder_id) $where['folder_id'] = $folder_id; | ||
53 | - return "select count(*) from `".static::$table."` where ".dbWhere($where); | 45 | + public static function listCount(string $where){ |
46 | + | ||
47 | + return "select count(*) from `".static::$table."` where ".$where; | ||
54 | } | 48 | } |
55 | 49 | ||
56 | /** | 50 | /** |
-
请 注册 或 登录 后发表评论