2012-02-10 2 views
3

다음은 MySQL의 DB에 삽입하는 동안 PDO 문은 DB에 삽입 실현하기 위해 내 PHP 코드 :SQLSTATE [HY093] :

<?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 내가 대상 환자를 만들 경우

$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; 
    } 

} 

는이 오류 얻을 :

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

을하지만 내가 가진 내가 왜 ... 이유를 몰랐어요 이 오류? 누군가 나를 도울 수 있니? 실수는 어디 있습니까?

+0

아무도 도와 줄 수 없습니까? –

+0

클래스를 만들었습니다. 뭔가를 반환해야합니까? –

+0

@DamienPirsy 여기 캐스트 $ STH-> execute ((array) $ cathy); –

답변

1

당신은 자리로 :dt를 사용하지만 클래스 생성자에서 당신은 $this->birth_date를 사용합니다.

일단 캐스팅되면 인덱스 "dt"과 일치하지 않는 인덱스가 'birth_date''인 배열이 생성됩니다. 둘 중 하나를 선택하십시오.

+1

예 ......... 네 ... .... 이제 작동 ... THANKS SO MUCH.THANKS –

+0

No guy, cheers :) –

+0

불행히도 또 다른 오류가 다시 왔습니다 : 값 목록 삽입이 열 목록과 일치하지 않습니다 : 1136 열 개수가 행 1의 값 개수와 일치하지 않습니다. –

1

이것이 오류의 원인인지는 모르지만 insert 문에서 CASE는 MySQL 예약어이며 백틱으로 이스케이프되어야합니다. 귀하의 요청에

$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

불행히도 아무것도 바뀌지 않았다 .... –

관련 문제