2012-02-10 4 views
3

への挿入時のPDO文のここでは、DBに挿入実現するために私のPHPコードです:SQLSTATE [HY093]:MySQLのDB

<?php 

require_once "includes/db_data_inc.php"; 

try 
{ 
    $DBH = new PDO("mysql:host=$db_host;dbname=$db_name",$db_user,$db_pass); 

    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $cathy = new patient($_POST['name'], 
         $_POST['surname'], 
         $_POST['address'], 
         $_POST['birth-place'], 
         $_POST['province'], 
         $_POST['dt'], 
         $_POST['gender'], 
         $_POST['select']); 

    $STH = $DBH->prepare("INSERT INTO users (name, 
              surname, 
              address, 
              birth_place, 
              province, 
              dt, 
              sex, 
              case) value (:name 
                 :surname, 
                 :address, 
                 :birth_place, 
                 :province, 
                 :dt, 
                 :sex, 
                 :case)"); 

    $STH->execute((array)$cathy); 

} 
catch (PDOException $pdoe) 
{ 
    error_log($pdoe->getMessage()); 
    die("An error was encountered!"); 
} 

?> 

ここでは、db_infoを保存し、私は対象患者

を作成している db_data_inc.phpです

[10-Feb-2012 21:14:29] SQLSTATE[HY093]: Invalid parameter number: parameter was not defined 

しかし、私は私が得た理由を...実現しなかった:私はこのエラーを取得する

$db_host = 'localhost'; 

$db_name = 'main_db'; 

$db_user = 'root'; 

$db_pass = 'root'; 

/* Create an object patient */ 

class patient 
{ 
    public $name; 
    public $surname; 
    public $address; 
    public $birth_place; 
    public $province; 
    public $birth_date; 
    public $sex; 
    public $case; 

    function __construct($nm,$sur,$addr,$bp,$pr,$bd,$sx,$cs) 
    { 
     $this->name = $nm; 
     $this->surname = $sur; 
     $this->address = $addr; 
     $this->birth_place = $bp; 
     $this->province = $pr; 
     $this->birth_date = $bd; 
     $this->sex = $sx; 
     $this->case = $cs; 
    } 

} 

このエラー?誰かが私を助けることができる?間違いはどこですか?

+0

誰も助けてくれませんか? –

+0

私はクラスを作成しました。それは何かを返す必要がありますか? –

+0

@DamienPirsyここでは、$ STH-> execute((array)$ cathy)をキャストします。 –

答えて

1

キャストされると、インデックス 'birth_date'の配列が作成されます。この配列は、指定されたパラメータ"dt"と一致しません。どちらか一方を選択してください。

+1

ええと.........ええええ... THANKS SO MUCH.THANKS –

+0

いいえ問題の男、歓声:) –

+0

残念ながら別のエラーが戻ってくる:値のリストが列のリストと一致しない:1136列のカウントが行1の値の数と一致しない –

1

これがエラーの原因であるかどうかはわかりませんが、insert文では、CASEはMySQLの予約語であり、バッククォートでエスケープする必要があります。プレースホルダとして:dt使用していますが、クラスのコンストラクタにあなたが$this->birth_dateを使用するクエリで

$STH = $DBH->prepare("INSERT INTO users (name, 
             surname, 
             address, 
             birth_place, 
             province, 
             dt, 
             sex, 
             `case`) value (:name 
                :surname, 
                :address, 
                :birth_place, 
                :province, 
                :dt, 
                :sex, 
                :case)"); 
+0

私はそれを修正しようとしています...あなたが仕事を知ってもらえば –

+0

残念ながら何も変わっていません.... –