【问题标题】:PDO Insert into database values from dynamic html tablePDO 从动态 html 表中插入数据库值
【发布时间】:2015-02-03 18:56:51
【问题描述】:

我是 PHP 新手,一直在努力处理动态 html 表。我的表正在工作,我已经能够获取这些值并将它们插入到 Mysql DB 上的表中。但是老实说,我很困惑为什么我所拥有的工作以及为什么我无法使用“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);
    }
}

这是来自我的 .php 文件

    for($i=0; $i < count($_POST['itemdesc']); $i++)
{


try
{
    $sql = "INSERT INTO invoicelineitem SET
        invoiceid = " . $last_id .",
        itemdesc = '" . $_POST['itemdesc'][$i] ."',
        unitprice = " . $_POST['unitprice'][$i].",
        quantity = " . $_POST['quantity'][$i].",
        linetotal = " . $_POST['linetotal'][$i];
    $s = $pdo->prepare($sql);
    $s->execute();

/* I can't get this to work

    $sql = 'INSERT INTO invoicelineitem SET
        invoiceid = :invoiceid,
        itemdesc = :itemdesc,
        unitprice = :unitprice,
        quantity = :quantity,
        linetotal = :linetotal';
    $s = $pdo->prepare($sql);
    $s->bindValue(':invoiceid', $last_id);
    $s->bindValue(':quantity', $_POST['quantity'][$i]);
    $s->bindValue(':untiprice', $_POST['unitprice'][$i]);
    $s->bindValue(':itemdesc', $_POST['itemdesc'][$i]);
    $s->bindValue(':linetotal', $_POST['linetotal'][$i]);
    $s->execute();
 */

这是我收到的错误消息:

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

【问题讨论】:

  • 这是一个拼写错误:unitprice,d d 并在linetotal' 中引用 setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
  • 您似乎在混合使用 PHP 和 JavaScript,但这是行不通的。
  • @JayBlanchard 很好 ;-) 直到你提到它我才看到。
  • 在打开 &lt;?php 标签 error_reporting(E_ALL); ini_set('display_errors', 1); 后立即将错误报告添加到文件顶部,看看它是否会产生任何结果。连接打开后也是$pdo-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  • @Mihai 又一个好收获。

标签: php mysql dynamic pdo


【解决方案1】:

您的查询设置为如同UPDATE 查询。 INSERT 查询不同,使用这种格式:

INSERT INTO `table` (`col1`, `col2`, ...)
VALUES ('val1', 'val2', ...)

INSERT 要求您指定要插入的列,后跟相等数量的 VALUES

更新:感谢@Mihai 的精彩捕捉,“untiprice insted of unitprice,占位符和 bindparam 值不同”

【讨论】:

  • 嗯... dev.mysql.com/doc/refman/5.6/en/insert.htmlINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (partition_name,...)] SET col_name={expr | DEFAULT}, ... 所以很难说真的。我也是这么想的。让我们看看 OP 怎么说 ;-)
  • Hmmmmm,我明白你的观点@Fred-ii- 尽管这似乎是一种相当不标准的插入方式。
  • 罗杰那@Fred-ii- ;-)
  • 我想我们也欠credit to Mihai。提及和Kudos to 将打破记录;-)
  • 完成交易@Fred-ii-
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 2017-06-14
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多