我能够毫无问题地从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安全相关的问题吗?
答案 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}}