【问题标题】:Why is fuelphp generating incorrect queries为什么fuelphp会生成不正确的查询
【发布时间】:2015-03-19 09:19:24
【问题描述】:

我正在尝试使用fuelphp 生成数据库查询。

 $query = DB::query("SELECT LCASE(:field) FROM :table WHERE :field = :val AND 'id' != :id");

 $query->bind('field',$field);
 $query->bind('table',$table);
 $query->bind('val',$val);
 $query->bind('id',$id);

 $result = $query->execute();

我的代码返回这个 mysql 查询:

SELECT LCASE('short_code') FROM 'events' WHERE 'short_code' = 'uvt2015' AND 'id' != '0`

这给了我这个错误

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'events' WHERE 'short_code' = 'uvt2015' AND 'id' != '0'

当我替换列名周围的单引号时,我得到了这个查询,它给了我想要的结果。

SELECT LCASE(`short_code`) FROM `events` WHERE `short_code` = 'uvt2015' AND `id` != '0'

为什么fuelphp 会生成带有错误引号的查询?我怀疑这可能是与我的fuelphp/php/mysql 版本有关的错误。

  • PHP版本:5.5.12
  • MySQL 版本:5.6.17
  • FuelPHP 版本:1.7.2

【问题讨论】:

    标签: php mysql fuelphp


    【解决方案1】:

    您不能将表名绑定为准备好的语句中的参数。它将作为字符串处理,因此此名称周围有单引号。

    你必须使用:

    $query = DB::query("SELECT LCASE($field) FROM `$table` WHERE $field = :val AND 'id' != :id");
    

    【讨论】:

    • 所以完整的查询应该是: $query = DB::query("SELECT LCASE($field) FROM $table WHERE $field = :val AND id != :id "); ?
    • 对于未来的新手访问者:请务必注意清理/转义$table$field,如果它来自用户输入(使用->bind 添加的参数则不需要)。
    猜你喜欢
    • 2012-12-26
    • 1970-01-01
    • 2014-11-15
    • 2019-09-11
    • 2016-07-05
    • 2020-11-12
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    相关资源
    最近更新 更多