php - PHP関数が引数をPDOクエリに渡さない

原文 php mysql pdo syntax

なぜ2番目の引数がクエリに渡されないのですか?

function LikesPastMonth($nMonth, $pid)
    {
        if($nMonth !== 0) {
            $n = $nMonth*-1-1;      
        } else {
            $n = -1;
        }
        $bdd = new PDO('mysql:host=localhost;dbname=xx', 'xx', 'xx', array(PDO::ATTR_PERSISTENT => true));
        $req = $bdd->prepare('SELECT * FROM likes WHERE thedate = DATE_ADD( DATE_ADD( LAST_DAY( CURDATE( ) ) , INTERVAL 1 DAY ) , INTERVAL '.$n.' MONTH ) AND pid = ?');
        $req->execute(array($pid));
        $result = $req->rowcount();
        if(!$result) {
            $result = 0;
        }
        return $result;
    }


argの代わりに定数を使用し、クエリを準備しないことは機能します。

define('pid','777');
$req = $bdd->query('SELECT * FROM likes WHERE thedate = DATE_ADD( DATE_ADD( LAST_DAY( CURDATE( ) ) , INTERVAL 1 DAY ) , INTERVAL '.$n.' MONTH ) AND pid = "'.pid.'"')->fetchColumn();


引数をクエリに直接入力しても機能しません(私が試した2つの例):

1:

$req = $bdd->query('SELECT * FROM likes WHERE thedate = DATE_ADD( DATE_ADD( LAST_DAY( CURDATE( ) ) , INTERVAL 1 DAY ) , INTERVAL '.$n.' MONTH ) AND pid = "'.$pid.'"')->fetchColumn();


2:

$req = $bdd->query('SELECT * FROM likes WHERE thedate = DATE_ADD( DATE_ADD( LAST_DAY( CURDATE( ) ) , INTERVAL 1 DAY ) , INTERVAL '.$n.' MONTH ) AND pid = '.$pid.'')->fetchColumn();
答え
定義を使用した例では、777を引用符でカプセル化しているため、機能しない場合があります。

メソッドを次のように呼び出していますか?

<?php
LikesPastMonth(3, 1);
?>
関連記事

php - app.yaml Google App Engineのphpにパラメーターを渡す

php - PHP-アップロード時に画像のサイズを変更し、元の画像を保持する

php - スフィンクス検索クエリテキスト+フロート

javascript - 1つのチェックボックスでより多くのフィールドを無効にする

php - プラグインではユーザー権限が機能するが、管理パネルでエラーが発生することを確認する

php - WordPressカスタムURL

php - ランダム投稿のダイナミックリンクが投稿IDと集計されない

php - 配列PHPの順列

php - symfonyのセキュリティ:セッションまたはoauthによる認証

php - HTMLクエリ文字列の代替