【问题标题】:eloquent - query builder running raw sql with bindingseloquent - 使用绑定运行原始 sql 的查询生成器
【发布时间】:2016-07-03 11:33:43
【问题描述】:

我有一个原始的 sql 查询代码,我想使用 laravel 中的 laravel 查询生成器运行:

 $q = "SELECT * FROM wp_posts WHERE post_parent = ?  ORDER BY ? ? LIMIT ?,   ?";    

  $values = ['40','post_status', "ASC" ,'1','10'];
   $q = $db->connection()->select($q,$values);  

这个查询会抛出一个错误,说明

SQLSTATE[42000]: Syntax error or access violation: 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 '? LIMIT ?, ?' at line 1 (SQL:    
SELECT * FROM wp_posts WHERE post_parent = `40` ORDER BY `post_status` ASC LIMIT 1, 10)

现在,当我从错误输出中复制查询并将其粘贴到 phpmyadmin sql 运行程序中时,它将运行而不会出现任何错误。

有什么想法吗??

【问题讨论】:

    标签: mysql sql laravel eloquent


    【解决方案1】:

    可能是 post_parent 不是字符串,不需要反引号

     $q = "SELECT * FROM wp_posts WHERE post_parent = ?  ORDER BY ? ? LIMIT ?,   ?";    
    
    $values = [ 40,'post_status', "ASC" ,'1','10'];
    

    【讨论】:

    • 是的,你是对的,但这是我尝试但没有运气的尝试之一
    【解决方案2】:

    如果你想用查询构建器来做这应该可以工作。

    $posts = DB::table('wp_posts')->where('post_parent', 40)->orderBy('post_status', 'ASC')->take(10)->get();
    

    Laravel 会自动将值与 PDO 绑定。

    【讨论】:

      【解决方案3】:

      似乎查询生成器不允许将 SQL 命令放在绑定变量中,当我从绑定变量中删除“ASC”时它起作用了:

      $q = "SELECT * FROM wp_posts WHERE post_parent = ?  ORDER BY ? ASC LIMIT ?,   ?"; 
      $values = [40,'post_status', 1,10];
      $q = $db->connection()->select($q,$values); 
      

      【讨论】:

        【解决方案4】:

        你会写

          $q = "SELECT * FROM wp_posts WHERE post_parent = ?  ORDER BY ? ? LIMIT ?,   ?";
        
          $values = [ 40,'post_status', "ASC" , 1, 10];
        

        希望这能解决您的问题

        【讨论】:

        • 使用未定义的常量 post_status - 假定为“post_status”
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-21
        • 1970-01-01
        • 2014-02-15
        • 1970-01-01
        • 2021-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多