2016-07-03 16 views
0

と生のSQLを実行しているクエリビルダ私はlaravelのうち、laravelクエリビルダを使用して実行したい生のSQLクエリのコードを持っている:雄弁 - バインディング

$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ランナーに貼り付けると、エラーなしで実行されます。

任意のアイデア??

答えて

0

クエリビルダは、私はそれが働いていた変数のバインドから「ASC」を削除する場合、バインド変数でSQLコマンドを置くことを許可しないようだ。

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

はpost_parentが文字列でない可能性があり、あなたがそれをしたい場合は

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

    $values = [ 40,'post_status', "ASC" , 1, 10]; 

がうまくいけば、これは問題

+0

はい、あなたは正しいですが、これはの一つであります私が運がないと試した試み – JohnTaa

0

必要はありません。クエリビルダを使用すると、これはうまくいくはずです。

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

Laravelは自動的に値をPDOにバインドします。

+0

定義されていない定数の使用post_status - 'post_status' – JohnTaa

0

を解決する書くことができますbacktics

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

$values = [ 40,'post_status', "ASC" ,'1','10'];