PHP(MySQL)用户存在校验条件不生效且报PDO未知字段错误如何解决
PHP+MySQL用户注册功能问题排查解决
问题1:"Unknown column 'xxx' in 'where clause'"致命错误
根因
用户存在性查询的SQL语句编写错误,你错误将用户输入变量$user作为数据表字段名拼接进了SQL:
// 错误写法:$user是用户输入的用户名,不是字段名 $stmt = $con->prepare("SELECT Username From users WHERE $user = ?");
当用户输入用户名为Ja_ay时,最终执行的SQL变为SELECT Username From users WHERE Ja_ay = 'Ja_ay',数据库不存在Ja_ay字段因此抛出报错。
修复方案
将条件字段替换为用户表实际存储用户名的字段Username即可:
$stmt = $con->prepare("SELECT Username From users WHERE Username = ?"); $stmt->execute(array($user)); $count = $stmt->rowCount();
问题2:用户已存在判断条件未触发
根因
该问题是问题1的连带影响:SQL语句错误要么直接抛出异常终止程序运行,要么查询结果不符合预期,$count永远无法等于1,因此判断逻辑无法触发。
修复方案
完成问题1的SQL修正后,该判断逻辑即可正常生效。
其他代码问题优化建议
- 长度校验提示错误:用户名最大长度限制为20字符,但错误提示写为「Cant Be More Than 4 Characters」,需对应修正提示文本。
- 跳转逻辑错误:用户名长度小于4的判断中直接执行了跳转,会导致后续其他字段的校验错误无法展示给用户,建议删除该处跳转,统一完成所有字段校验后再处理跳转。
- 文本拼写错误:用户已存在提示中的
Sory The This User Is Exist存在拼写和语法错误,建议修正为Sorry, this user already exists;注册成功提示的Record Update不符合新增业务场景,建议改为Record inserted。 - 标签闭合错误:非法访问提示的div标签缺少闭合符
>,需补全避免前端样式异常。
内容的提问来源于stack exchange,提问作者R_isa
相关产品推荐
相关产品推荐

