簡體   English   中英

PHP MySQL 無法執行多個准備好的語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM