2016-03-22 7 views
2

以下のクエリは、1つの変数($ MyURL)のみを含む場合に機能しました。しかし、私は$ MySectionを追加したとき、私はこのエラーメッセージ入門:に与えられたCOUNT(URL)クエリを使用する複数の変数

をPDOStatement :: bindParam()パラメータ3が長いことを期待し、文字列を...

私は複数の値を追加する方法を知っています配列をフェッチするクエリでは、この種のクエリは私のために混乱しています。私は間違って何をしていますか?

$sql= "SELECT COUNT(URL) AS num FROM pox_topics 
WHERE URL = :MyURL AND Site = 'PX' AND Section = ':MySection' AND Live != 0"; 
$stmt = $pdo->prepare($sql); 
$stmt->bindParam(':MyURL',$MyURL,':MySection',$MySection,PDO::PARAM_STR); 
$stmt->execute(); 
$Total = $stmt->fetch(); 

編集:私は$のMyURL、$ MySectionおよびそれらの両方を、次の次PDO :: PARAM_STRと、次のクエリを試してみた

...

$sql= "SELECT COUNT(URL) AS num FROM pox_topics 
WHERE URL = :MyURL AND Site = 'PX' AND Section = :MySection AND Live != 0"; 
$stmt = $pdo->prepare($sql); 
$stmt->bindParam(':MyURL',$MyURL,PDO::PARAM_STR); 
$stmt->bindParam(':MySection',$MySection); 
$stmt->execute(); 
$Total = $stmt->fetch(); 

しかし、私このエラーメッセージが表示される:「無効なパラメータ番号:バインドされた変数の数がトークンの数と一致しません」

+0

はまたPDOのエラー処理を使用します' –

+0

オリジナルをチェックし、pox_topicsとWHEREの間にスペースがあります。 –

+0

RTM http://php.net/manual/en/pdostatement.bindparam.phpあなたはそれを間違っているし、 '':MySection''の周りに引用符を入れてはいけません。 –

答えて

1

2番目のビンの周りに引用符がありますd ':MySection'AND Section = ':MySection'で、削除する必要があります。

次に、同じbindParamの両方のバインドを使用しています。彼らは別々のステートメントにする必要があります。

$sql= "SELECT COUNT(URL) AS num FROM pox_topics 
WHERE URL = :MyURL AND Site = 'PX' AND Section = :MySection AND Live != 0"; 
$stmt = $pdo->prepare($sql); 
$stmt->bindParam(':MyURL',$MyURL); 
$stmt->bindParam(':MySection',$MySection,PDO::PARAM_STR); 
$stmt->execute(); 
$Total = $stmt->fetch(); 

追記:あなたはPDO::PARAM_STRを使用したい1わかりません。それぞれ調整します。

また、これらの変数に値が設定されていることを確認してください。エラーが報告されると、失敗した場合は何かがスローされます。マニュアルhttp://php.net/manual/en/pdostatement.bindparam.php

$calories = 150; 
$colour = 'red'; 
$sth = $dbh->prepare('SELECT name, colour, calories 
    FROM fruit 
    WHERE calories < :calories AND colour = :colour'); 
$sth->bindParam(':calories', $calories, PDO::PARAM_INT); 
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); 
$sth->execute(); 

から

例は、エラーを見つけましょうあなたのファイルの先頭(複数可)にerror reportingを追加します。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// Then the rest of your code 

追記:の表示エラーが唯一のステージングで行われていない、と決して生産されなければなりません。それはあなたの実際のコードだ場合 `pox_topics`とMySQLを代わりにWHERE pox_topics FROM`のpox_topicsWHERE` FROM `として読み込まれた後、何のスペースがありません

+0

Thx。あなたのスクリプトを試してみましたが、両方の変数に値があり、両方がデータベースにあることが確認されましたが、まだエラーが発生しています。私は今どこにいるのかを説明するために投稿を編集しました。私は簡単な間違いをしているに違いないので、私はそれを続けていきます。 –

+0

@DavidBlomstromデビッドを歓迎します。 PDOのhttp://php.net/manual/en/pdo.error-handling.phpでエラー報告やエラーチェックをしていないか確認してください。 –

+0

@DavidBlomstromあなたが試みることのできるもう一つのものは、それらのいずれかまたはすべてに対して 'bindParam'ではなく' bindValue'です。 –

関連する問題