mysqlデータベースに問題なく挿入できますが、レコードを更新することはできません。update文が動作しません(通常の文と準備文)
最初は、結果やエラーなしで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を使うべきである場合、おそらくあなたは整数を設定します。 –