1

ここで何が間違っているのかわかりません。このクエリで WHERE 句を省略すると、サーバーはデータベースからすべての行を返します。だから私はその部分が機能することを知っています。WHERE句を使用する場合、つまり

WHERE name='$name' AND loc='$loc' -

結果は得られますが、bindValue を使用するか、execute コマンドでバインダーを渡すと、エラーもデータも得られません

    $stmt = "SELECT * FROM table1 LEFT JOIN table2 ON table1.ID=table2.fkID".
            " WHERE name = :name AND loc = :loc";

    $binder = array(':name' => $name, ':loc' => $loc);

これは、これらのパラメーターを受け取る関数の場合

public function fetchData($stmt, $binder = array())
    {
        $DB = new PDO(........);
        $STMT =  $DB->prepare($stmt);

        foreach ($binder as $key => $value):
            $k = (is_numeric($key)) ? $key + 1 : $key;
            if (is_int($value)):
                $STMT->bindValue($k, (int) $value, PDO::PARAM_INT);
            else:
                $STMT->bindValue($k, $value, PDO::PARAM_STR);
            endif;
        endforeach;

        try {
            $STMT->execute();
            return $STMT->fetchAll(PDO::FETCH_ASSOC);
        }
        catch (PDOException $e) {
            die($this->error = $e->getMessage());
        }

ここで何が間違っていますか。申し訳ありませんが、すべての質問を同様に検索しましたが、答えがありません。

4

1 に答える 1

0

コードをもう一度書き直すことでこれを修正しました。

foreach ($binder as $key => $value):
            $k = (is_numeric($key)) ? $key + 1 : $key;
            $v = $value;
            if (is_int($v)):
                $STMT->bindValue($k, (int) $v, PDO::PARAM_INT);
            else:
                $STMT->bindValue($k, $v, PDO::PARAM_STR);
            endif;
        endforeach;

元の $value の代わりに foreach ステートメントで使用されている $v に注意してください。

于 2012-07-01T16:24:36.897 に答える