
正文
thinkphpwhere条件and,thinkphp insertall
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
ThinkPHP无法使用where条件
楼上正解,用th的query函数,支持原生查询,返回来的同样就是一个关联数组的结果。
不用的哈,用什么PHP框架,就要多看这个框架的手册。http://document.thinkphp.cn/manual_3_html#where,就如此题来说,你传递过来的id值,就是表的主键。pid一般是为父键的意思,$catemodel-where(pid=%d,$_GET[id])-select();查询的是这个id所对应子集的。
where方法的用法是ThinkPHP查询语言的精髓,也是ThinkPHP ORM的重要组成部分和亮点所在,可以完成包括普通查询、表达式查询、快捷查询、区间查询、组合查询在内的查询操作。where方法的参数支持字符串和数组,虽然也可以使用对象但并不建议。
可能是没有打开查询功能。在开始中找到控制面板打开程序和功能。打开或关闭Windows功能windowssearch(把勾选勾上即可)。确定之后,电脑重启就好了。
Thinkphp里面的where方法是具有过滤作用的,也就是说你这里想通过openid参数去注入是失败的。因为where方法对传入的参数进行了转义。具体可以去看下源码。
其实默认的就是如果条件为空的时候是直接查全部的,也可以用if..else..进行判断的选择查询方法。希望我的回答对楼主有帮助,不懂可以继续追问。
相关问答
Q1: 官方求助,thinkphp如何防注入
1、User-find($_GET[id]);即便用户输入了一些恶意的id参数,系统也会强制转换成整型,避免恶意注入。这是因为,系统会对数据进行强制的数据类型检测,并且对数据来源进行数据格式转换。而且,对于字符串类型的数据,ThinkPHP都会进行escape_string处理(real_escape_string,mysql_escape_string)。
2、主要的sql注入来源于数据请求。比如表单的提交。攻击者会在请求中带上一些可执行的sql语句。达到注入的目的。Thinkphp内置了数据过滤机制。可以有效的将一些存在风险的符号过滤处理。具体如下:Thinkphp2版本:使用I方法来获取post、get等参数。例如获取id参数。
3、sql注入其实就是在这些不安全控件内输入sql或其他数据库的一些语句,从而达到欺骗服务器执行恶意到吗影响到数据库的数据。防止sql注入,可以在接受不安全空间的内容时过滤掉接受字符串内的“”,那么他不再是一条sql语句,而是一个类似sql语句的zifuc,执行后也不会对数据库有破坏。
4、各种框架里面其实都有对于非法字符过滤的支持,最简单的比如ThinkPHP,你可以直接防止注入。写一个PHP扩展对于进入参数进行有选择的过滤。 开发一个PHP扩展是对于一个PHP高级程序员必备的技能,将你需要的功能打包在PHP扩展里面,就像黑词过滤一样进行检查,是非常方便的。
Q2: ThinkPHP中查询数据库where()中的条件必须包含主键值吗
ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作。查询条件可以用于CURD等任何操作,作为where方法的参数传入即可。ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用索引数组或者对象来作为查询条件,因为会更加安全。
详见:ThinkPHP0完全开发手册 13 CURD操作 更新数据(Update):为了保证数据库的安全,避免出错更新整个数据表,如果没有任何更新条件,数据对象本身也不包含主键字段的话,save方法不会更新任何数据库的记录。
thinkphp为了保证数据库的安全,避免出错更新整个数据表,如果没有任何更新条件,数据对象本身也不包含主键字段的话,save方法不会更新任何数据库的记录。所以我猜测你的form表单中没有传递id(不包含主键)的值,或者没有任何更新条件,最终导致你save()方法没有效果。
where方法的用法是ThinkPHP查询语言的精髓,也是ThinkPHP ORM的重要组成部分和亮点所在,可以完成包括普通查询、表达式查询、快捷查询、区间查询、组合查询在内的查询操作。where方法的参数支持字符串和数组,虽然也可以使用对象但并不建议。
这个不是原生写法,这是tp固有的写法,里面对语句做了封装,就是查询fields表里条件是model为空或其他条件符合的值。
其次,查询构造器是ThinkPHP中另一个重要的防SQL注入工具。查询构造器提供了一种链式调用的方式来构建SQL语句,它内部会自动处理数据的转义和拼接,用户无需直接编写SQL语句。这种方式不仅代码更加简洁易读,而且能够大大减少因手动拼接SQL而产生的注入漏洞。
Q3: 如何用数组作为查询条件
首先,登录到sql server managment管理工具并找到一个表,如下图所示。其次,完成上述步骤后,按时间向后排序,如下图所示,然后进入下一步。接着,完成上述步骤后,直接添加desc,如下图所示,然后进入下一步。然后,完成上述步骤后,结果将按时间向后排序,如下图所示,然后进入下一步。
使用VLOOKUP+辅助列进行多条件查找 本例采用的方法是在原表的最前面加一辅助列,辅助列的公式为:=B2&C2 然后再采用VLOOKUP进行如下查找:=VLOOKUP(F2&G2,A:D,4,0)这里所采用的方法其实就是把多条件进行合并,将其转换为单条件查找。
mysql原生语句where数组条件查询 where后加多个条件可以用and来连接。
EJB的Find方法 在显示第一页前将所有的记录放在collection对象中,后续的各页都在内存中取。每一页都到数据库作一次重复的查询,然后将符合条件的记录显示出来。保存前几页的搜索结果在内存中(经常使用到的),后续的记录(这些数据是多数用户都没有耐心看的)再通过连数据库取得。
Q4: thinkphp中连贯操作,在where判断条件中不能使用Mysql内置函数,如YEAR,D...
楼上正解,用th的query函数,支持原生查询,返回来的同样就是一个关联数组的结果。
所以使用连贯操作对开发者来说是友好的,大大提高了开发和维护的效率,再从题主所说的运行效率开看,调用一个函数,在函数里面实现字符串拼接的过程不会比直接拼接字符串慢很多,而你直接写sql语句还需要考虑各种过滤的问题,总体下来框架还是有一定的优势的。
where方法的用法是ThinkPHP查询语言的精髓,也是ThinkPHP ORM的重要组成部分和亮点所在,可以完成包括普通查询、表达式查询、快捷查询、区间查询、组合查询在内的查询操作。where方法的参数支持字符串和数组,虽然也可以使用对象但并不建议。
limit方法也是模型类的连贯操作方法之一,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多。ThinkPHP的l imit方法可以兼容所有的数据库驱动类的。
首先,ThinkPHP提供了强大的数据库操作类,其中包含了各种数据库操作方法。当使用这些方法时,框架会自动对输入的数据进行转义处理,从而降低SQL注入的风险。但更为推荐的做法是使用参数绑定。参数绑定能够确保传递给SQL语句的数据与命令分开,这样即使数据中包含恶意代码,也不会被数据库执行。
); 这种方法最简单高效,因为不需要定义任何的模型类,所以支持跨项目调用。缺点也是因为没有自定义的模型类,因此无法写入相关的业务逻辑,只能完成基本的CURD操作。
Q5: thinkphp的where条件为在一个范围又不等于怎么写
1、where方法的用法是ThinkPHP查询语言的精髓,也是ThinkPHP ORM的重要组成部分和亮点所在,可以完成包括普通查询、表达式查询、快捷查询、区间查询、组合查询在内的查询操作。where方法的参数支持字符串和数组,虽然也可以使用对象但并不建议。
2、-where(parent_id=.$userid)-getField(userid,true);//一级 查询 foreach($arrData as $v){ $in[] = $v;//获取到一级用户数组。
3、查询条件可以用于CURD等任何操作,作为where方法的参数传入即可。ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用索引数组或者对象来作为查询条件,因为会更加安全。
4、不用的哈,用什么PHP框架,就要多看这个框架的手册。http://document.thinkphp.cn/manual_3_html#where,就如此题来说,你传递过来的id值,就是表的主键。pid一般是为父键的意思,$catemodel-where(pid=%d,$_GET[id])-select();查询的是这个id所对应子集的。
5、你这个条件很好写啊,前面2个条件不变,后面的那个条件直接用in查询:where[name]=test;where[zhi]=zhi;where[shi]=array(in,array(shi,fou));user=M(user)-where($where)-select();这样就OK了。
关于thinkphpwhere条件and和thinkphp insertall的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







