2017-07-21 16 views
2

ユーザーログイン機能を使用していて、「無効な列数」という奇妙な問題に直面しています。私はそれをGoogleと多くの人が同じ問題を抱えていて、彼らの質問は少し違っていた。SQLSTATE [HY093]:無効なパラメータ番号 - PDO Select文

は、ここに私のコードです:

//this is a function inside user class. And function receives $user_data array 
try{ 

    $stmt = $this->db_connection->prepare("SELECT `id` FROM `aaa_users` WHERE (`user_email` = :user_email OR `user_name` = :user_email) AND `user_pass` = :user_pass"); 
    $stmt->bindparam(':user_email', $user_data['email']); 
    $stmt->bindparam(':user_pass', $user_data['password']); 
    $stmt->execute(); 

    $count = $stmt->rowCount(); 

} catch (PDOException $e){ 
    echo $e->getMessage(); 
} 

登録クエリの作品が、これは例外をスローします。私は知っている、小さな間違いがあるだろうが、私は一日中過ごしているとそれを把握することはできません。

助けていただければ幸いです!

+0

「bindparam」の代わりに['bindParam'](http://php.net/manual/en/pdostatement.bindparam.php)(大文字の「P」)を試してみることをお勧めします。それ以外のものはすべて私にとって正しいものです。 –

+0

mysqliではなくpdoを確実に実行しますか? – Doug

+0

あなたは3つのプレースホルダーを持ち、2つはバインドされています...「無効な列数」がどこに由来しているのでしょうか。 – YvesLeBorg

答えて

2

コメントに記載されているように、PDOのエミュレーションはサーバー上で有効にされていない可能性があり、同じ名前のプレースホルダを使用している可能性があります。

私はそれぞれ:user_mail:user_email_1:user_email_2の両方に名前を変更しました。

$stmt = $this->db_connection->prepare(" 
             SELECT `id` FROM `aaa_users` 
             WHERE (`user_email` = :user_email_1 
             OR `user_name` = :user_email_2) 
             AND `user_pass` = :user_pass 
            "); 
$stmt->bindparam(':user_email_1', $user_data['email']); 
$stmt->bindparam(':user_email_2', $user_data['email']); 
$stmt->bindparam(':user_pass', $user_data['password']); 
$stmt->execute(); 

あなたはスタック上で、次のQ & Aにこの詳細を読むことができます:

その中accepted answerは、良い説明を提供しています。

注:$user_data['X_values']に関連するすべての値に値が含まれていることを確認してください。これは、それが以前のクエリから来ている可能性があり、その起源/値については不明であることを示しています。

、以下のリンクをたどってチェック

使用エラーは、それらのいずれかがすでにテスト中に使用されていない場合:

すべての列が中に行うことを確認しながら事実は存在する。あなたのデータベース/テーブルが大文字と小文字を区別している可能性はわずかな可能性があるので、それも大文字と小文字を区別して確認してください。

別のもの;過去に人々が実際にの代わりにキャメルケースでbindParamを小文字で使用しなければならなかったことが起こっています。それは可能です。

+0

ありがとうございます@Fred -ii-、問題は同じプレースホルダーを使用していたためです。 :) – Alena

+0

あなたは大歓迎です@Alenaそれは解決されたことを喜んでいる、*歓声* :-) –

関連する問題