zoukankan      html  css  js  c++  java
  • thinkPHP替换SQL变量

    使用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,依此类推。

  • 相关阅读:
    202011051 每周例行报告
    202011261 每周例行报告
    202010153 每周例行报告
    keil代码定位
    VC2008创建MFC工程遇到的问题及解决方法
    面朝大海, 春暖花
    Oracle10G数据库教程
    郁闷来了
    MPEG4与.mp4
    vs2003 使用ffmpeg,sdl时的编译问题
  • 原文地址:https://www.cnblogs.com/efan/p/6434011.html
Copyright © 2011-2022 走看看