2012-02-10 36 views
3

这是我的PHP代码实现插入到数据库:SQLSTATE [HY093]:插入过程中PDO语句转换成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

没人能帮帮我吗? – 2012-02-10 21:05:32

+0

我创建了这个类。它必须返回一些东西? – 2012-02-10 23:18:01

+0

@DamienPirsy在这里我执行$ STH-> execute((array)$ cathy); – 2012-02-10 23:22:02

回答

1

在查询中使用:dt作为占位符,但在类的构造函数使用$this->birth_date

一旦铸造,将创建一个索引为'birth_date'的阵列,与指定参数"dt"不匹配:选择其中一个。

+1

是啊......... yeahhh ....现在它工作...感谢这么多。问题 – 2012-02-10 23:36:57

+0

没问题的人,欢呼声:) – 2012-02-10 23:37:40

+0

现在不幸的是另一个错误回来了:插入值列表不匹配列列表:1136列数不匹配第1行的值计数 – 2012-02-10 23:41:28

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

我正在努力解决它...让你知道,如果工作 – 2012-02-10 20:41:13

+0

不幸的是没有任何改变.... – 2012-02-10 20:50:29