当前位置: 首页 > news >正文

东坑仿做网站/快速收录网

东坑仿做网站,快速收录网,网站数据库文件名,如何做影视网站先上代码这是控制器下登陆Action的代码//登陆提交控制器 public function logAction() { //获取登录表单参数 $userid $this->getRequest()->getParam(userid); $password $this->getRequest()->getParam(psd); //创建表模型并查询登录密码 $table new user(); …

先上代码

这是控制器下登陆Action的代码

//登陆提交控制器 public function logAction() { //获取登录表单参数 $userid = $this->getRequest()->getParam('userid'); $password = $this->getRequest()->getParam('psd'); //创建表模型并查询登录密码 $table = new user(); $where = 'userid ='.$userid; $row = $table->fetchRow($where)->toArray(); //验证表单密码和数据库密码 if($row['password'] == $password) { //创建全局变量session用户名id session_start(); $_SESSION['userid'] = $userid; //显示登陆成功视图 $this->render('logok'); } else { //密码错误显示登录失败视图 $this->render('logfailed'); } }

这就是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

$where = 'userid ='.$userid;

应写作

$where = "userid ='$userid'";

不行 还是那样.. 传入表单的用户名只要带有字母就报错了..

这问题实在是太奇怪了

010可能变成了10,而010_010则还是010_010

我数据库里定义的userid数据类型是varchar(10)

表单参数获取过来 我也没有使用任何字符串处理函数啊 怎么可能010变了呢

我就怕参数传错 还特意输出出来看了一下呢 表单传参应该没问题

打印每一条查询命令看看吧?

打印每一条查询命令看看吧?

弄了很久 还是没有找到原因 但现在用别的办法把问题解决了

传进来的表单参数没有问题,但一旦送进fetchrow()方法就嘣了

数字没有问题 但一旦传字母就报错

后来我获取表模型适配器 用qutoeInto()方法处理一下传进来的参数

然后用适配器query()方法执行的sql语句 没有异常出现

虽然能用了 但还是没有找到一开始那么做出错的原因 可能问题还是出在了$where参数上吧...

debug下么 看下是数据库查询错误还是其他错误

大概找到问题的所在了

首先问题确实是出在了$where条件上

我后来进行调试 用适配器 quoteInto()方法处理表单参数 然后赋给

$where = $msgAdapter->quoteInto("?", $userid);

然后我显示$where出来 发现表单获取的参数无论是数字还是字母 都会加上了单引号 形如'001' 'robin'

然后我又尝试不用quoteInto()方法 像一楼哥们说的那样 把

$where = 'userid ='.$userid;

写作

$where = "userid ='$userid'";

这样实际上不就和quoteInto()方法处理过后的参数是一个意思了么?

调试之后也通过了

但为什么用我楼上帖子中贴出来的代码能通过数字参数却不能通过字母参数呢??

我推测 可能是因为sql语句规范上的问题造成

我上面代码里通过php传给mysql的sql语句 其中的where子句肯定是不带引号的'' 但是此时传入数字竟然可以执行 传入带字母的参数却不能

然后我打开mysql这样分别输入了三条sql语句 问题的原因就比较清晰了

这是我在mysql执行的三条语句

可见 对于纯数字的值加不加单引号都可以被mysql服务器执行

但是 对于含有字母的值就必须用单引号引起来才能被mysql服务器执行

图中报的错误叫unknown column 'robin'

未知的列..

我也不知道这叫什么错误了

总而言之 还是通过适配器调用quoteInto()方法处理一下参数然后再构造sql语句比较正确

我之前一直都是随手写一个001 002 这样的字段取值

就一直没发现这个问题...

而具体为什么能直接执行不带单引号的数字取值的sql语句 还是等待楼下给出更好的答案吧

按理说,楼上说的 $where = 'userid ='.$userid; 应写作 $where = "userid ='$userid'"; 这个应该就是解决楼主问题的答案啊,就是字母要加单引号的问题嘛!

varchar要加引号。。。否则被当成数字处理。

数字,加不加引号都是数字。只不过不加引号表示的是数值,加引号表示是串。对于弱类型而言两者是一样的

字母,加引号表示串,不加引号就表示名称,具体含义由上下文决定

比如

userid = robin

就会报错 unknown column 'robin' 因为你的表中不存在名为 robin 的字段

只有

userid = 'robin'

才表示 userid 的值为 robin

学习了 感谢xu大大

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

http://www.jmfq.cn/news/4843621.html

相关文章:

  • 什么网站做兼职可靠/合肥网站seo推广
  • 政府部门门户网站建设方案/企业网站模板下载
  • 辽宁网站建设学校/爱站查询
  • wordpress做排行榜单/优化seo培训班
  • 景观设计公司排名前十强/聊城seo优化
  • 注册外贸公司的流程及费用/亚马逊seo关键词优化软件
  • 做室内设计的网站有哪些方面/net的网站建设
  • 怎么样做网站爬虫/qq推广平台
  • 优建网站/新品推广活动方案
  • 让路由器做网站服务器/公司网站免费自建
  • 做系统之前的网站/小学生抄写新闻20字
  • 广州网站建设企业/衡阳百度推广
  • 个旧市建设局网站/app拉新项目
  • 发布了一个网站 显示建设中/平台连接
  • 做网站需要的素材照片/最常见企业网站公司有哪些
  • 东莞定制网站建设/2023年九月份新闻
  • 网站开发和设计/黑帽seo之搜索引擎
  • 网站建设技术标准/推广方式有哪些?
  • 阿里云网站的网页怎么做/广告投放是做什么的
  • 重庆网站公司设计/百度seo软件是做什么的
  • html怎么做网站地图/产品推广ppt范例
  • 网站首页快照怎么做/关键词推广优化外包
  • 网站 数据库空间 50mb/企业seo职位
  • 网站浏览器兼容性测试/百度竞价推广方案的制定
  • 如何做一个购物网站页面/千川推广官网
  • 街道政府网站三基建设汇报/自己如何做一个网站
  • 动漫一级a做爰片免费网站/app开发费用一般多少钱
  • 互动网站欣赏/陕西seo快速排名
  • 如何建一个企业网站/河南最新消息
  • 网站开发费算无形资产吗/seo项目是什么