我能夠插入和從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的安全相關的問題?
使用'mysqli_stmt_affected_rows'來檢查受更新語句影響的行數。請記住,如果輸出正確,代碼可能不會從查詢部分失敗。檢查什麼參數正在通過及其價值。也許現在由於綁定錯誤而導致更新結果。最有可能的是,你應該在整數的'$ _POST'中使用intval時設置整數 –