2011-12-05 18 views
1

を代入していない私は、PHPコードの短いセグメントを持っている:PHP PDO準備文のクエリは

$stm = $db->prepare($sql); 
$result = $stm->execute($params); 

$ paramsは、以下の

array(1) { 
    [0]=> 
    string(3) "why" 
} 

しかし、MySQLへ送信される$のSQLは、まだAが含まれていますMySQLのログによる疑問符:

1 Query SELECT a.* FROM article a 
LEFT JOIN article_links al on a.id = al.from_article_id 
WHERE al.to_article = '?' 

私には何か他のものがありますか?

+2

'$ sql'は疑問符を一重引用符で囲みますか?もしそうなら、それらを削除してください! –

答えて

6

あなたは疑問符周りの単一引用符を持っている必要はありません。

SELECT a.* FROM article a 
LEFT JOIN article_links al on a.id = al.from_article_id 
WHERE al.to_article = ?; 
+0

いいキャッチとスポットがオン、+1。 – middus

+0

ありがとうございます。しかし、これは疑問を提起します。私のSQLクエリに引用符を付けるかどうかは、PHPがどのように知っていますか?たとえば、この場合、to_articleはvarcharですが、intの場合はどうなりますか? – Dave

+0

パラメータのタイプを定義する場合は、 'bindParam'を使用します。このパラメータでは、すべてのパラメータのデータ型を指定できます。詳細はこちらをご覧ください:http://www.php.net/manual/en/pdostatement.bindparam.php、例が必要な場合はお問い合わせください! :) – jValdron

2

私はこれが本当である疑いがある:

$sql = "SELECT a.* FROM article a LEFT JOIN article_links al on a.id = al.from_article_id WHERE al.to_article = '?'" 

疑問符がquotes--に囲まれたべきではありませんつまり、パラメータプレースホルダではなく文字列です。ちょうどal.to_article = ?を使用してください。

+0

ありがとうございます。私が上で尋ねたように、文字列のプレースホルダとintの間の指定方法を教えてください。 – Dave

+0

通常は必要ありません。あなたが望むなら、あなたは準備時間ではなく、束縛時にそれを行います。例えば。 '$ preparedstatement-> bindValue($ param、$ val、PDO :: PARAM_INT)'となります。デフォルトは 'PDO :: PARAM_STR'です。 –