2012-02-10 5 views
3

Вот это мой PHP код, чтобы понять, вставить в БД:SQLSTATE [HY093]: п.д.о. заявление во время вставки в MySQL БД

<?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_data_inc.php где хранится db_info и где я создаю пациент объекта

$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.

После того, как оно будет выполнено, это создаст массив с индексом 'birth_date', который не соответствует указанному параметру "dt": выберите тот или иной.

+1

да ......... yeahhh .... теперь это работает ... THANKS SO MUCH.THANKS –

+0

Нет проблем с человеком, приветствия :) –

+0

Теперь, к сожалению, еще одна ошибка возвращается: Вставка списка значений не соответствует списку столбцов: 1136 Число столбцов не соответствует количеству значений в строке 1 –

1

Не уверен, что это является причиной вашей ошибки, но в вашем заявлении вставки 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

К сожалению, ничего не изменилось .... –

Смежные вопросы