1

私の問題と性質が似ている他のいくつかの質問を調べましたが、この PDO データベース ライター スクリプトでは配列やループを使用していません。他のいくつかの解決策が何であったかについて混乱していますが、私はまだこの問題で立ち往生しています。

私のスクリプトは次のように書かれています:

<?php
class DatabaseWriter
{
    public function writeUserToDatabase($email , $name , $age , $gender , $country , $category)
    {   
        $host = '***********';
        $dbname = 'emailcollection';
        $user = '**********';
        $pass = '**********';
        $jointime = '2013-01-07 11:19:08';

        try {
            $connection = new PDO("mysql:host=" . $host . ";dbname=" . $dbname, $user, $pass);
            $connection -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
            $statement = $connection -> prepare("INSERT INTO emailcollection (emailaddress, name, age, gender, country, category, jointime) VALUES (:emailaddress, :name, :age, :gender, :country, :category, :jointime)");
            $statement -> bindValue(':email', $email);
            $statement -> bindValue(':name', $name);
            $statement -> bindValue(':age', $age);
            $statement -> bindValue(':gender', $gender);
            $statement -> bindValue(':country', $country);
            $statement -> bindValue(':category', $category);
            $statement -> bindValue(':jointime', $jointime);
            $statement -> execute();

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

?>

出力:

SQLSTATE[HY093]: 無効なパラメーター番号: パラメーターが定義されていません

$jointime とは何かと疑問に思うかもしれません。それがテーブルの最後の列で、「無効なパラメーター番号」というメッセージが表示されるので、列の数を正確に一致させる必要があると考えました (ユーザーが書き込まれたときにタイムスタンプを追加しようとしていますが、 PHPまたはSQLで何とか)。

フィードバックをお寄せいただきありがとうございます。

4

1 に答える 1

1

解決策は、クエリが列名 :emailaddress を使用し、bindValue() が :email を参照していたことです。

于 2013-03-30T02:47:16.207 に答える