【问题标题】:Fatal error for mysqli prepare statement when adding less then comparators添加少于比较器时mysqli准备语句的致命错误
【发布时间】:2012-11-15 01:18:59
【问题描述】:

我正在使用此代码选择一些日期小于某一天的行。当我将<=(小于)放入 sql 中时,我会抛出一个致命错误。仅添加= 时它有效(没有错误但结果错误)。

我正在使用来自 https://github.com/ajillion/PHP-MySQLi-Database-Class 的 PHP-MySQLi-Database-Class

$params = array($id, $day, $day);
$results = $db->rawQuery("
       SELECT * 
       FROM `forecasts` 
       WHERE `geonameid`=? and (DAY(time_from) <= DAY(?) 
       OR DAY(time_to) <= DAY(?))", $params);

致命错误:问题准备查询 (SELECT * FROM forecasts WHERE geonameid=? and (DAY(time_from) ) 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册在 '' 附近使用正确的语法

我做错了什么?

【问题讨论】:

  • 你确定你有比较运算符吗?在我看来你想要:WHERE geonameid=?和 (DAY(time_from) >= DAY(?) OR DAY(time_to)
  • 没错,不是我写的吗?
  • 我在time_from之后从=
  • 不,这不是问题所在。我需要找到包含一天中任何部分的时间段。

标签: php mysqli prepared-statement


【解决方案1】:

看起来是 PHP-MySQLi-Database-Class 问题。 第 101 行,函数 rawQuery

$this->_query = filter_var($query, FILTER_SANITIZE_STRING);

这个函数去掉标签,你的查询结果是

SELECT * FROM `forecasts` WHERE `geonameid`=? and (DAY(time_from)

所以你可以把这一行替换为

$this->_query = $query;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多