2015-10-27 102 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

相关问题