2015-10-27 118 views
1

我將數據插入到我的數據庫時沒有問題。 我得到這個錯誤,但我不知道的方式。我有其他腳本幾乎相同的查詢,它工作正常,但這不是。我檢查在鉻檢查員POST數據顯示罰款。PHP - MYSQL - SQLSTATE [HY093]:無效的參數編號

如果你有什麼想法,請告訴我。 在此先感謝。

$fact_total = (float)$_POST['precio']; 
$fact_btax = (float)$_POST['precio_sin']; 
$fact_tax = (float)$_POST['impuestos']; 
$fact_name = e($_POST['fact_name']); 
$fact_tipo = e($_POST['fact_serv']); 

    $fact_tax_rate = 21; 

    try{ 
     $handler = $db->prepare('INSERT INTO fact_info 
     (id_client, cl_name, cl_last_name, cl_last_name_2, cl_email, cl_tel, cl_doc_type, cl_doc, cl_via, cl_street, cl_number, cl_level, cl_stairs, cl_door, cl_provincia, cl_city, cl_cod_postal, fact_urgencia, fact_name, fact_tipo, fact_total, fact_btax, fact_tax, fact_tax_rate, created) VALUES (:id_client, :cl_name, :cl_last_name, :cl_last_name_2, :cl_email, :cl_tel, :cl_doc_type, :cl_doc, :cl_via, :cl_street, :cl_number, :cl_level, :cl_stairs, :cl_door, :cl_provincia, :cl_city, :cl_cod_postal, :fact_urgencia, :fact_name, :fact_tipo, :fact_total, :fact_btax, :fact_tax, :pres_tax_rate, NOW())'); 
     $handler->execute(array(
     ':id_client' => $client_ids, 
     ':cl_name' => e($_POST['fact_cl_name']), 
     ':cl_last_name' => e($_POST['fact_lastname']), 
     ':cl_last_name_2' => e($_POST['fact_lastname_2']), 
     ':cl_email' => e($_POST['fact_email']), 
     ':cl_tel' => e($_POST['fact_tel']), 
     ':cl_doc_type' => e($_POST['fact_document_type']), 
     ':cl_doc' => e($_POST['fact_document_number']), 
     ':cl_via' => e($_POST['fact_dir_via']), 
     ':cl_street' => e($_POST['fact_dir_calle']), 
     ':cl_number' => (int)$_POST['fact_dir_number'], 
     ':cl_level' => e($_POST['fact_dir_level']), 
     ':cl_stairs' => e($_POST['fact_dir_stairs']), 
     ':cl_door' => e($_POST['fact_dir_door']), 
     ':cl_provincia' => e($_POST['fact_dir_provincia']), 
     ':cl_city' => e($_POST['fact_dir_localidad']), 
     ':cl_cod_postal' => (int)$_POST['fact_dir_cod_postal'], 
     ':fact_urgencia' => '1', 
     ':fact_name' => $fact_name, 
     ':fact_tipo' => $fact_tipo, 
     ':fact_total' => $fact_total, 
     ':fact_btax' => $fact_btax, 
     ':fact_tax' => $fact_tax, 
     ':fact_tax_rate' => $fact_tax_rate 
    )); 

    $fact_id = $db->lastInsertId(); 

    foreach ($_POST['inv_desc'] as $key => $value) { 
     $handler4 = $db->prepare('INSERT INTO fact_content (id_fact, fact_desc, fact_qty, fact_price, fact_subtotal) VALUES (:id_fact, :fact_desc, :fact_qty, :fact_price, :fact_subtotal)'); 
     $handler4->execute(array(
      ':id_fact' => $fact_id, 
      ':fact_desc' => e($_POST['inv_desc'][$key]), 
      ':fact_qty' => (float)$_POST['inv_qty'][$key], 
      ':fact_price' => (float)$_POST['inv_precio'][$key], 
      ':fact_subtotal' => (float)$_POST['inv_subtotal'][$key] 
     )); 
    } 

     header('Location: fact_confirm.php?fact_id='.$fact_id.''); 
     exit(); 
+0

哪個錯誤? –

+0

它在標題中,但現在解決了。 – abonive

+0

Yeap,我看到它有點晚了.. –

回答

6

我會向您解釋爲何發生此錯誤。

SQLSTATE [HY093]:無效參數號

此錯誤基本上發生的原因如下。

Reason1

正如錯誤顧名思義,有一個在你準備的查詢參數的數量之間的一些difference。我的意思是,看看下面的例子:

$s = $conn->prepare("INSERT INTO table(column1,column2) values(:column1) 
$s->bindParam(':column1', $column1Value); 
$s->bindParam(':column2', $column2Value); 

現在,這會產生你所提到的,因爲你想插入2列中的錯誤,但只針對1

提供價值

Reason2

$s = $conn->prepare("INSERT INTO table(column1) values(:column1,:column2) 
$s->bindParam(':column1', $column1Value); 
$s->bindParam(':column2', $column2Value); 

現在,因爲你想插入值成一列,但提供裏面值,這將產生一個錯誤查詢的部分。

Reason3

$s = $conn->prepare("INSERT INTO table(column1,column2) values(:column1,:column2) 
$s->bindParam(':column1', $column1Value); 

在這種情況下,你寫的查詢部分正確。但是,您錯過了綁定第二個值的參數:column2

這些是這個錯誤顛簸的原因。檢查你的代碼,你會發現你做出的3個錯誤。

+0

感謝您的詳細解釋。這是我的代碼中的一個錯字。 – abonive

+0

這是一個很好的,深思熟慮的答案。然而,它沒有回答OP爲什麼會遇到問題的實際原因。這更多的是一般性答案。 – FrankerZ

+0

@FrankerZ 我只是認爲這將在未來幫助更多的人。我也給了OP一種解決他的問題的方法;) – Akshay

2

看起來沒有:fact_tax_rate。看起來像一個錯字。您的最後一條插入語句欄插入:pres_tax_rate

+0

謝謝。該死的我怎麼錯過了。 – abonive

1

您的第一個插入的倒數第二個值的變量名稱錯誤。將:pres_tax_rate更改爲:fact_tax_rate

+0

謝謝,我錯過了很多細節。 – abonive

相關問題