thinkphp问题

查看:112
本文介绍了thinkphp问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我下载的是最新的tp3.2.3,我在执行语句的时候遇到问题

就是where或者add,update的时候,

参数错误都不会报错,而是直接过滤掉,我想问下,是我配置的问题吗

问题:<1>比方说user表 字段 username password,我在add的时候,把username写成了usernames,结果语句成功了,不过只插入了password

<2>查询user表,我where条件里面,故意把array('username'=>'aaa')写成array('usernames'=>'aaa')
结果sql直接过滤成了空条件,也就是变成了select * from user ;

debug有开,表明错误会报错,可是字段错误不报错!打印最后一条sql语句的时候,显示的那些错误的字段或者条件,全部被过滤掉了。

解决方案

下面照搬了文档内容。

对于<1>,thinkphp3.2.3文档上说明如下:

模型/CURD操作/数据写入/字段过滤

字段过滤
如果写入了数据表中不存在的字段数据,则会被直接过滤,例如:
$data['name'] = 'thinkphp';
$data['email'] = 'thinkphp@gmail.com';
$data['test'] = 'test';
$User = M('User');
$User->data($data)->add();

其中test字段是不存在的,所以写入数据的时候会自动过滤掉。

在3.2.2版本以上,如果开启调试模式的话,则会抛出异常,提示:非法数据对象:[test=>test]

如果在add方法之前调用field方法,则表示只允许写入指定的字段数据,其他非法字段将会被过滤,例如:
$data['name'] = 'thinkphp';
$data['email'] = 'thinkphp@gmail.com';
$data['test'] = 'test';
$User = M('User');
$User->field('name')->data($data)->add();
最终只有name字段的数据被允许写入,email和test字段直接被过滤了,哪怕email也是数据表中的合法字段。

对于<2> thinkphp3.2.3文档上说明如下:

模型/查询语言/查询方式

在使用数组和对象方式查询的时候,如果传入了不存在的查询字段是会被自动过滤的,例如:

$User = M("User"); // 实例化User对象
$condition['name'] = 'thinkphp';
$condition['status'] = 1;
$condition['test'] = 'test';
// 把查询条件传入查询方法
$User->where($condition)->select(); 

因为数据库的test字段是不存在的,所以系统会自动检测并过滤掉$condition['test'] = 'test'这一查询条件。

如果是3.2.2版本以上,当开启调试模式的话,则会抛出异常,显示:错误的查询条件。

这篇关于thinkphp问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆