簡體   English   中英

如何使用commit()查找記錄插入到mysql

[英]how to find record insert to mysql using commit()

對不起這個初學者的問題,我不是PHP開發人員,但是現在我正在嘗試學習它。

我想在MySQL數據庫中添加記錄,並且我正在使用事務鎖定。

我的代碼如下。

$SqlQuery="INSERT INTO tab_photo VALUES('$PhotoID','$ProjectId','$Day','$barCode','$photoName','$PhotoXml')";

$waiting = true;
while($waiting) {
    try {
        // save border data
        $stmt = $conn->prepare($SqlQuery);
        $conn->beginTransaction();
        $stmt->execute();
        sleep(1);

        $x=$conn->commit();
        echo "x value-".$x;

        echo "Success";
        $waiting = false;
    }
    catch (PDOException $e){
        echo "Failled :".$PhotoID."-".$PhotoID;
        if(stripos($e->getMessage(), 'DATABASE IS LOCKED') !== false) {
            // This should be specific to SQLite, sleep for 0.25 seconds
            // and try again.  We do have to commit the open transaction first though
            $conn->commit();
            usleep(250000);
        } else {
            $conn->rollBack();
            throw $e;
        }
    }
}

在這里作為輸出,

x value-1 Success

但實際上該記錄不會添加到數據庫中。

我的問題:

  1. 即使提交成功(輸出1),也如何不將其添加到數據庫中?
  2. 如何檢查記錄是否已添加到數據庫? (沒有寫選擇語句,有沒有辦法找到它?

據我了解,您希望在語句執行失敗時會引發PDOException。 但是正如我所看到的,在這種情況下默認情況下不會拋出異常。 在這里了解如何更改

假設您的情況是這樣的代碼:

$conn = new PDO($connection_string); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // this will force PDO to throw exception when SQL statement fails instead of simply setting an error.

假設這對您來說很好。

請注意,您不應使用

$SqlQuery="INSERT INTO tab_photo VALUES('$PhotoID','$ProjectId','$Day','$barCode','$photoName','$PhotoXml')";

相反,您應該使用參數綁定:

$SqlQuery="INSERT INTO tab_photo VALUES(:PhotoID,:ProjectId,:Day,:barCode,:photoName,:PhotoXml)";
$stmt = $conn->prepare($SqlQuery);
$conn->beginTransaction();
$stmt->execute(array(':PhotoID' => $PhotoID, ':ProjectId' => $ProjectId, ....));
sleep(1);

請參閱了解更多詳情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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