更新语句不起作用(常规语句以及准备语句)

时间:2017-02-04 04:36:40

标签: php mysqli ubuntu-16.04

我能够毫无问题地从mysql数据库中插入和选择,但无法更新记录。

最初我使用mysqli_query时没有任何结果或错误。后来我尝试了没有结果的预备声明。

在此处分享我的代码:

 define('DB_SERVER', 'localhost');
 define('DB_USERNAME', 'xxxx');
 define('DB_PASSWORD', 'xxxx');
 define('DB_DATABASE', 'xxxx');
 $db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);

 //the function
 function SaveLineItem() {
     $sql = "update lineitems set deliverycost=? ";

     $tdetail = "";
     if($_POST['tdetail']){
        $sql .= ",tracking_details=?" ;
        $tdetail = $_POST['tdetail'];
     }

     $sql .= " where id=?";

     $dc = $_POST['dc'];
     $lineItemId = $_POST['lineItemId'];
     echo $sql;

     $stmt = mysqli_prepare($db, $sql);
     echo "<br>after prepare statement";

    if($tdetail<>""){
        mysqli_stmt_bind_param($stmt,"isi",$dc1,$tdetail1,$lineItemId1);
     }else {
        mysqli_stmt_bind_param($stmt,"ii",$dc1,$lineItemId1);
    }

    echo "<br>after binding";

    $dc1 = $dc;
    if($tdetail<>""){
        $tdetail1 = $tdetail;   
        echo "<br>detail param bound";
    }

    $lineItemId1 = $lineItemId;
    mysqli_stmt_execute($stmt);

    echo "<br>statement executed";
     //header("location:../welcome.php");
}

输出结果为:

update lineitems set deliverycost=? ,tracking_details=? where id=?
after prepare statement
after binding
detail param bound
statement executed

但是在查看表格时没有更新。  从昨天开始尝试,我错过了什么?

更新: 这段代码最初是在windows中开发的,但后来我决定继续在Ubuntu 16.04中工作。似乎在ubuntu中甚至插入都不起作用。这可能是与ubuntu安全相关的问题吗?

2 个答案:

答案 0 :(得分:0)

尝试将execute语句放入变量中,最后回显它,以便查看查询是否失败。

然后尝试将查询的输出放入phpmyadmin以查看是否有错误。

答案 1 :(得分:0)

请试试这个。您在$dc1中使用mysqli_stmt_bind_param时未定义$dc1。对于您id,保留更新记录的 define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'xxxx'); define('DB_PASSWORD', 'xxxx'); define('DB_DATABASE', 'xxxx'); $db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE); //the function function SaveLineItem() { $sql = "update lineitems set deliverycost=? "; $tdetail = ""; if($_POST['tdetail']){ $sql .= ",tracking_details=?" ; $tdetail = $_POST['tdetail']; } $sql .= " where id=?"; $dc = intval($_POST['dc']); $lineItemId = intval($_POST['lineItemId']); echo $sql; $stmt = mysqli_prepare($db, $sql); echo "<br>after prepare statement"; // define $dc1 here since you use it below. If it is undefined could resolve to an error or a wrong query. $dc1 = $dc; if($tdetail<>""){ mysqli_stmt_bind_param($stmt,"isi",$dc1,$tdetail1,$lineItemId1); }else { mysqli_stmt_bind_param($stmt,"ii",$dc1,$lineItemId1); } echo "<br>after binding"; if($tdetail<>""){ $tdetail1 = $tdetail; echo "<br>detail param bound"; } $lineItemId1 = $lineItemId; mysqli_stmt_execute($stmt); echo "<br>statement executed"; mysqli_stmt_close($stmt); echo "<br>statement closed"; //header("location:../welcome.php"); } 。如果这是null,那么您将不会在数据库中看到任何更改。查询运行但不影响任何行。

{{1}}