自己做了个登陆注册的小东西 但一旦用字母登陆就报错
先上代码
这是控制器下登陆Action的代码
<br />//登陆提交控制器<br /> public function logAction()<br /> {<br /> //获取登录表单参数<br /> $userid = $this->getRequest()->getParam('userid');<br /> $password = $this->getRequest()->getParam('psd');<br /> //创建表模型并查询登录密码<br /> $table = new user();<br /> $where = 'userid ='.$userid;<br /> $row = $table->fetchRow($where)->toArray();<br /> //验证表单密码和数据库密码<br /> if($row['password'] == $password)<br /> {<br /> //创建全局变量session用户名id<br /> session_start();<br /> $_SESSION['userid'] = $userid;<br /> //显示登陆成功视图<br /> $this->render('logok');<br /> }<br /> else <br /> {<br /> //密码错误显示登录失败视图<br /> $this->render('logfailed');<br /> } <br /> }<br />
로그인 후 복사
这就是user表
+--------+----------+----------+
| userid | username | password |
+--------+----------+----------+
| 010 | messi | 010 |
| robin | test | robin |
+--------+----------+----------+
首先注册过程一切正常 这两条记录都可以正常插入
但登陆的时候 用第一条记录010登陆的时候正常
用第二条记录robin登陆的时候就出错了!! 报的是500错误 An error occurred Application error
而如果我随便写一个用户名提交表单后 如果带字母就报错 没有字母纯数字的话就不报错 但也没有显示任何跳转信息
首先我分析出了随便写用户名密码时没有任何跳转的原因 就是因为fetchRow的返回值为null
但为什么我一旦写入英文字符就报错??
获取表单参数应该没有问题 表模型也应该没有问题
页面字符集 mysql字符集 zend studio字符集也都统一为了utf-8
是$where条件写的不对么 可是用数字登陆成功跳转啊
怎么还会出这么奇葩的问题呢...小弟经验不足 还得求教各位高手了
我还测试了010_010这种不带字母带特殊字符的字符串 提交之后也是报500的错
这问题实在是太奇怪了..
------解决方案--------------------$where = 'userid ='.$userid;
应写作
$where = "userid ='$userid'";
------解决方案--------------------010可能变成了10,而010_010则还是010_010
------解决方案--------------------打印每一条查询命令看看吧?
------解决方案--------------------debug下么 看下是数据库查询错误还是其他错误
------解决方案--------------------按理说,楼上说的 $where = 'userid ='.$userid; 应写作 $where = "userid ='$userid'"; 这个应该就是解决楼主问题的答案啊,就是字母要加单引号的问题嘛!
------解决方案--------------------varchar要加引号。。。否则被当成数字处理。
------解决方案--------------------数字,加不加引号都是数字。只不过不加引号表示的是数值,加引号表示是串。对于弱类型而言两者是一样的
字母,加引号表示串,不加引号就表示名称,具体含义由上下文决定
比如
userid = robin
就会报错 unknown column 'robin' 因为你的表中不存在名为 robin 的字段
只有
userid = 'robin'
才表示 userid 的值为 robin