Masalah:
Semasa menggunakan kelas PHP PDO, percubaan untuk mengendalikan ralat membawa kepada kod melaporkan nilai nol dan kekal tidak aktif.
Kod:
<code class="php">$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Exception handling is enabled $id = 33; $name = "Mario Bros."; $url = "http://nintendo.com"; $country = "jp"; try { $sql = "UPDATE table_users SET name = :name, url = :url, country = :country WHERE user_id = :user_id"; $statement = $connection->prepare($sql); $statement->bindParam(':user_id', trim($id), PDO::PARAM_INT); $statement->bindParam(':name', trim($name), PDO::PARAM_STR); $statement->bindParam(':url', trim($url), PDO::PARAM_STR); $statement->bindParam(':country', trim($country), PDO::PARAM_STR, 2); $status = $statement->execute(); } catch (PDOException $e) { echo $e->getMessage(); }</code>
Penyelesaian:
PDO tidak membuang pengecualian secara automatik. Untuk mendayakan pengendalian pengecualian, baris berikut mesti ditambah sebelum cuba melaksanakan sebarang pertanyaan:
<code class="php">$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);</code>
Penjelasan:
Dengan menetapkan mod ralat PDO kepada ERRMODE_EXCEPTION, semua ralat berkaitan PDO akan dibuang sebagai pengecualian. Blok cuba/tangkap kemudiannya boleh digunakan untuk mengendalikan pengecualian ini dan memberikan mesej ralat yang bermakna kepada pengguna atau sistem pengelogan.
Atas ialah kandungan terperinci Mengapa Pengecualian PDO Saya Membuang Nilai Batal dan Tidak Melaksanakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!