2011-07-06 26 views
2

PDOが引用符を使用してint値をカプセル化し、その後クエリが失敗するという問題があります。挿入値の配列を使用してPDO :: PARAM_INTを渡す際の問題

これはコード(ラッパー関数を使用して)

$newest = query("SELECT id, body, upvotes, downvotes 
       FROM suggestions ORDER BY timestamp DESC LIMIT :min, :max", 
    array(
     ':min' => $min, 
     ':max' => $max 
    ) 
); 

であり、これはエラーが発生した不正なクエリである(LIMIT値の前後に引用符に注意してください)

SELECT id, body, upvotes, downvotes FROM suggestions ORDER BY timestamp DESC LIMIT '0' , '50' 

私は」値の配列を渡します:

array(
    ':min' => $min, 
    ':max' => $max 
) 

これらはどちらもINTです。インターネット上で読んでください。PDOは自動的にそれを見つけて、それをバインドするときにはPDO::PARAM_INTを使います。問題はそれが実際には起こらないということです。それらを渡す私の唯一の方法は、を使わずにPDO::PARAM_INTになるように強制する方法があるかどうかを尋ねたいと思います。

ありがとうございます。

+0

bindParamを使用することができ、あなたのラッパーで第三のparamを追加しますか? – dynamic

+0

ラッパー関数を使用しているため、ラッパー関数は配列のみを許可するためです –

+0

この標準のPDOクラスのみを使用すると問題がありますか? (それはベストアイデアではありません) – dynamic

答えて

1

ラッパーを使用していて、bindParamを使用することができないならば、あなたが行うことができます:

$min=(int)$min; 
$max=(int)$max; 
query("SELECT id, body, upvotes, downvotes 
       FROM suggestions ORDER BY timestamp DESC LIMIT $min, $max"); 

これは最高のアイデアではありません。標準を維持したい場合は、そのようなケースを処理するためにラッパーを改善する必要があります。

などが

function query($q,$paramArray,$bindParamArray) {} 

だからあなたが効果的にあなたの唯一の方法は、配列である理由もあまりに

+0

ありがとう、それはエラーを修正しましたが、今すぐクエリは空の結果を返します。 PHPMyAdminから同じクエリを実行すると有効な(空ではない)結果が得られるので、これは奇妙です。 PDOを使用して実行されたクエリを確認する方法はありますか? –

+0

getLastQuery();また、Googleはあなたの友人です – dynamic

+0

Nevermind!私の側ではちょっとした問題でした。値を文字列に直接置き換えるとうまく動作しました。どうもありがとうございました。 –

関連する問題