thinkphp mysql绑定变量_thinkPHP替换SQL变量

本文探讨了在使用ThinkPHP框架进行数据库查询时遇到的一个问题,即WHERE条件字符串格式化错误导致所有数据被查询出来。问题源于`DATE_FORMAT`函数中的百分号 `%` 被错误解析。解决方案包括:1) 对日期格式字符串使用双百分号 `%%` 进行转义;2) 直接使用MySQL的字符串截取函数避免 `%` 符号。通过这两种方法,可以正确构造WHERE条件,从而获取预期的查询结果。
摘要由CSDN通过智能技术生成

使用tp里

M()->where(pb_id=%d and course=%d and DATE_FORMAT(pub_time, \"%H:%i:%s\") < "%s", array($pb_id, $coursse, $time))->select();

想要查询拆书包,结果是把所有的数据都查出来了,

调试断点时发现tp把 where的第二个数组参数交给相应连接mysql的escapeString方法了,

如mysql的连接方式就是mysql_escape_string

mysqli的当然就是mysqli_escape_string

然后用php的函数vsprintf()把第一个参数 和第二个参数按格式打印出来

这样写的问题就是发现第一个参数有6个%,但是给的参数只有3个,导致where是false

改进:

1、把where的字符改成 DATE_FORMAT(pub_time, \"%%H:%%i:%%s\")

2、另一种是直接用mysql的截取方法,不出现%

附:

参数 format 是转换的格式,以百分比符号 ("%") 开始到转换字符结束。下面的可能的 format 值:

%% - 返回百分比符号

%b - 二进制数

%c - 依照 ASCII 值的字符

%d - 带符号十进制数

%e - 可续计数法(比如 1.5e+3)

%u - 无符号十进制数

%f - 浮点数(local settings aware)

%F - 浮点数(not local settings aware)

%o - 八进制数

%s - 字符串

%x - 十六进制数(小写字母)

%X - 十六进制数(大写字母)

arg1, arg2, ++ 等参数将插入到主字符串中的百分号 (%) 符号处。该函数是逐步执行的。在第一个 % 符号中,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值