[英]PHP MySQL Unable to execute multiple prepared statements
更新一個表中的記錄后,我需要更新另一個表中的記錄,其中可能有多個行需要更新。
SQL 命令在直接運行時工作正常,但在 PHP 內運行不正常。第一次更新工作正常,但兩次更新從未運行。 是的,我已經知道重新設計數據庫會更好,但事實就是如此。
為什么不能一個接一個地執行多個准備好的語句? 我已經嘗試過 mysqli_stmt_close($stmt) 之間,沒有幫助。
如果有人知道解決方案,請提前致謝。
function process_edit($input) {
// once validated:
// use prepared statement to UPDATE record
GLOBAL $conn; // $conn already defined globally
$output = "\t<article>\n";
$sql = "
UPDATE alltagsunique
SET TagNo=?, Description=?, Location=?, Manufacturer=?, ModelNo=?, ExCertNo=?, ExRating=?, LayoutDwgNo=?
WHERE id=?
";
if ($stmt = mysqli_prepare($conn, $sql)) {
mysqli_stmt_bind_param($stmt, "ssssssssi", $input['TagNo'],$input['Description'],$input['Location'],$input['Manufacturer'],$input['ModelNo'],$input['ExCertNo'],$input['ExRating'],$input['LayoutDwgNo'],$input['id']);
$qresult = mysqli_stmt_execute($stmt);
// Display error or success...
$tagno=$input['TagNo'];
if ($qresult) {
$output .= "\t\t<h2>Equipment Successfully Updated.</h2>\n";
$output .= "\t\t<form method='post' action='/TagMachine/index.php'><input type='hidden' name='searchstring' value='$tagno'>";
$output .= "<input type='submit' class='boxlink' value='Done'></form>\n";
} else {
$output .= "\t\t<h2>AN ERROR OCCURRED</h2>\n";
$output .= "\t\tPlease try completing the edit again. <a href='/TagMachine/index.php'>Home.</a>\n";
}
}
// update cables table too:
$a = $input['TagNo'];
$b = $input['LayoutDwgNo'];
$output .= "<b>Tag:</b> $a <b>LayoutDwgNo:</b> $b";
$sql2 = "UPDATE cablestest SET FromLayoutDwg=?, FromLoc=? WHERE FromTagNo=?";
if ($stmt2 = mysqli_prepare($conn, $sql2)) {
mysqli_stmt_bind_param($stmt2, "sss", $input['LayoutDwgNo'],$input['Location'],$input['TagNo']);
$qresult2 = mysqli_stmt_execute($stmt2);
if (!$qresult2) {$output .= "\t<br><b>PROBLEM UPDATING CABLE LIST (FROM)</b>\n"; }
}
$sql3 = "UPDATE cablestest SET ToLayoutDwg=?, ToLoc=? WHERE ToTagNo=?";
if ($stmt3 = mysqli_prepare($conn, $sql3)) {
mysqli_stmt_bind_param($stmt3, "sss", $input['LayoutDwgNo'],$input['Location'],$input['TagNo']);
$qresult3 = mysqli_stmt_execute($stmt3);
if (!$qresult3) {$output .= "\t<br><b>PROBLEM UPDATING CABLE LIST (TO)</b>\n"; }
}
$output .= "\t</article>\n";
// Return result:
return $output;
}
在一個查詢中執行所有三個更新會很好,但我非常懷疑這是可能的。 我不能一次執行三個查詢並執行,因為它們是准備好的語句(因為所有查詢都應該是恕我直言)。
添加
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
就在建立連接之前:
$conn = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME) or die("Can not connect to DB");
讓我意識到其中一排的長度太短了。 難以置信的!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.