SQLSTATE [HY093]: pdo statement in insert in mysql db

Here my PHP code implements insert in 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!"); } ?> 

Here's db_data_inc.php where db_info is stored and where I create the patient object

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

I get this error:

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

But I did not understand the reason ... why did I get this error? can someone help me? Where is the mistake?

+3
source share
2 answers

In your request, you use :dt as a placeholder, but in the class constructor you use $this->birth_date .

After creating this array, an array will be created with the ' birth_date' index, which does not match the specified "dt" parameter: select one or the other.

+1
source

Not sure if this is the cause of your error, but in your insert statement, CASE is the reserved word MySQL and should be escaped with back windows.

 $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)"); 
+1
source

All Articles