Php PDO从动态html表插入数据库值

Php PDO从动态html表插入数据库值,php,mysql,dynamic,pdo,Php,Mysql,Dynamic,Pdo,我是PHP新手,一直在努力处理动态html表。我让这个表正常工作,并且我能够获取这些值并将它们插入Mysql数据库上的一个表中。然而,老实说,我很困惑,为什么我所拥有的能够工作,为什么我不能得到使用“bindValue”的方法来工作 有人能解释为什么bindValue方法不起作用吗?这是我的密码。如果你看到一些可以改进的地方,我很乐意听听你的想法 <!-- This is from my HTML file --> <script language="javascr

我是PHP新手,一直在努力处理动态html表。我让这个表正常工作,并且我能够获取这些值并将它们插入Mysql数据库上的一个表中。然而,老实说,我很困惑,为什么我所拥有的能够工作,为什么我不能得到使用“bindValue”的方法来工作

有人能解释为什么bindValue方法不起作用吗?这是我的密码。如果你看到一些可以改进的地方,我很乐意听听你的想法

 <!-- This is from my HTML file -->

    <script language="javascript">

function addRow(tableID) { 

    var table = document.getElementById(tableID);

    var rowCount = table.rows.length;
    var row = table.insertRow(rowCount);

    var cell1 = row.insertCell(0);
    var element1 = document.createElement("input");
    element1.type = "checkbox";
    element1.name="chkbox[]";
    cell1.appendChild(element1);

    var cell2 = row.insertCell(1);
    cell2.innerHTML = "<input type='text' name='itemdesc[]' >";

    var cell3 = row.insertCell(2);
    cell3.innerHTML = "<input type='number'  name='unitprice[]' >";

    var cell4 = row.insertCell(3);
    cell4.innerHTML =  "<input type='number'  name='quantity[]' >";

    var cell4 = row.insertCell(4);
    cell4.innerHTML =  "<input type='number'  name='linetotal[]' >";
    }

function deleteRow(tableID) {
    try {
    var table = document.getElementById(tableID);
    var rowCount = table.rows.length;

    for(var i=0; i<rowCount; i++) {
        var row = table.rows[i];
        var chkbox = row.cells[0].childNodes[0];
        if(null != chkbox && true == chkbox.checked) {
            table.deleteRow(i);
            rowCount--;
            i--;
        }
    }
    }catch(e) {
        alert(e);
    }
}

函数addRow(tableID){
var table=document.getElementById(tableID);
var rowCount=table.rows.length;
var row=table.insertRow(rowCount);
var cell1=行插入单元格(0);
var element1=document.createElement(“输入”);
element1.type=“复选框”;
element1.name=“chkbox[]”;
单元格1.附加子元素(元素1);
var cell2=行插入单元格(1);
cell2.innerHTML=“”;
var cell3=行插入单元格(2);
cell3.innerHTML=“”;
var cell4=行插入单元格(3);
cell4.innerHTML=“”;
var cell4=行插入单元格(4);
cell4.innerHTML=“”;
}
函数deleteRow(tableID){
试一试{
var table=document.getElementById(tableID);
var rowCount=table.rows.length;
对于(var i=0;iprepare($sql);
$s->execute();
/*我不能让它工作
$sql='插入到invoicelineitem集合中
发票ID=:发票ID,
itemdesc=:itemdesc,
单价=:单价,
数量=:数量,
linetotal=:linetotal';
$s=$pdo->prepare($sql);
$s->bindValue(':invoiceid',$last\u id);
$s->bindValue(':quantity',$\u POST['quantity'][$i]);
$s->bindValue(':untiprice',$\u POST['unitprice'][$i]);
$s->bindValue(':itemdesc',$_POST['itemdesc'][$i]);
$s->bindValue(':linetotal',$\u POST['linetotal'][$i]);
$s->execute();
*/
这是我收到的错误消息:

异常“PDOException”,消息为“SQLSTATE[HY093]:参数编号无效:未在/media/sf#u mcpi/mcpi/invoice/index.php中定义参数:216堆栈跟踪:#0/media/sf#mcpi/mcpi/invoice/index.php(216):PDOStatement->execute()#1{main}


您的查询被设置为一个
更新
查询。
插入
查询是不同的,使用以下格式:

INSERT INTO `table` (`col1`, `col2`, ...)
VALUES ('val1', 'val2', ...)
INSERT
要求指定要插入的列,后跟相等数量的


更新:多亏@Mihai的好理解,“untiprice而不是unitprice,占位符和bindparam值是不同的”

这是一个打字错误吗
:unitprice,d
你似乎混合了PHP和JavaScript,这将不起作用。@JayBlanchard good catch;-)直到你提到这一点,我才发现。在打开
@Mihai之后立即将错误报告添加到文件的顶部,这是另一个很好的捕获。Hm…说
插入[LOW_PRIORITY | DELAYED | HIGH_PRIORITY][IGNORE][INTO]tbl_name[分区(分区名称,…)]SET col u name={expr | DEFAULT,…
所以说真的很难说。我也想到了。让我们看看OP有什么要说的;-)嗯,我明白你的观点@Fred ii-虽然这似乎是一种相当不标准的插入方式。收到@Fred ii-;-)我想我们也欠了。一次提及和赞扬将打破记录;-)完成交易@Fred ii-
INSERT INTO `table` (`col1`, `col2`, ...)
VALUES ('val1', 'val2', ...)