Android与PHP/MySQL项目中用户注册时间获取的技术疑问
关于Android+PHP/MySQL项目中注册时间的最佳实践
嘿,这个问题其实挺典型的,我来帮你理清楚几种方案的优劣,以及哪种最适合你的场景:
绝对不要通过POST传递DATE字段
客户端(也就是你的Android应用)的时间完全不可信——用户可以随意修改设备时间,或者恶意请求直接伪造一个错误的时间传过来,这样你数据库里的注册时间就完全失去了准确性。而且还要额外处理时间格式不统一、时区偏差这些问题,纯粹给自己加工作量,完全没必要。最推荐的方案:直接在MySQL查询中使用
NOW()
数据库服务器的时间是统一且可控的,用它生成的时间最可靠。你的数据库字段类型已经设为timestamp,刚好完美适配NOW()的输出格式。
举个预处理语句的例子(一定要用预处理,避免SQL注入!):// 假设你的用户表有username、email、created_at字段 $sql = "INSERT INTO users (username, email, created_at) VALUES (?, ?, NOW())"; $stmt = $pdo->prepare($sql); // 绑定POST过来的合法参数,注意要先做参数校验哦 $stmt->execute([$_POST['username'], $_POST['email']]);这种方式不需要在PHP里额外处理时间,数据库直接搞定,时区也能统一控制(只要你数据库的时区配置正确),省心又靠谱。
备选方案:在PHP中生成时间后存入数据库
如果你因为某些原因需要在PHP层处理时间,也可以用date('Y/m/d H:i:s'),但一定要注意时区统一——PHP的默认时区可能和数据库不一致,得先设置正确的时区:// 比如设置为上海时区,根据你的实际需求调整 date_default_timezone_set('Asia/Shanghai'); $created_at = date('Y/m/d H:i:s'); $sql = "INSERT INTO users (username, email, created_at) VALUES (?, ?, ?)"; $stmt = $pdo->prepare($sql); $stmt->execute([$_POST['username'], $_POST['email'], $created_at]);这种方式的灵活性稍高,但不如直接用数据库
NOW()省心,毕竟多了一步时区配置的操作。
总结一下:优先选MySQL的NOW()方案,其次是PHP生成时间,绝对不要用客户端POST传递时间!另外不管用哪种方式,都一定要用预处理语句处理SQL,避免安全问题。
内容的提问来源于stack exchange,提问作者panker
相关产品推荐
相关产品推荐

