![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
1、dbの例外処理ってなぜするのですか?接続できなかったらコンパイルエラー?が起きるだけなのではないのでしょうか?
2.例外処理は下記のコードで合ってますか?
try{
$db=new SQLite3("test.db");
//例外に投げる処理
if (empty($db)) {
throw new Exception();
}
// トランザクション開始
$db->exec('begin');
//実行したい処理
// コミット
$db->exec('commit');
}
$db->close();
}
catch (Exception $e) {
echo 'エラーが発生しました: ' . $e->getMessage();
// ロールバック
$db->exec('rollback');
}
No.2ベストアンサー
- 回答日時:
> では、if文を省いたもので大丈夫でしょうか?
マニュアルにはnullを返すような説明はありませんからね。
> $db->exec('begin');のexecの返り値がfalseになったときの処理ってした
> 方がよいのでしょうか?もしした方がよい場合、処理の方法を教えてくだ
> さい。
exec()の実行結果はboolで返すようなのでそうですね。
失敗したら失敗した時のコードを書けばいいだけです。
if (!$db->exec('begin')) {
// 失敗時のコード
}
https://www.php.net/manual/ja/pdo.begintransaction
こちらはPDOクラスを利用した場合の命令です。
SQLite3クラスを利用している場合には無関係です。
ユーザー寄稿メモの提示コードにある$this->transactionCounterは、
その人のコードであって、PDOで提供されているものではありません。
No.1
- 回答日時:
戻り値はemptyになることはなさそうだし、失敗時は例外が発行されるので、if (empty()〜)は不要ですね。
また、発行してるクエリに誤りがあれば、それも例外が発行されるはずです。
このままの処理の場合、catchでは$dbの内容が確定しているとは限らないため、$dbにSqLite3オブジェクトが格納されていることを判断する必要があります。
なるほど。ありがとうございます。
では、if文を省いたもので大丈夫でしょうか?
よくかよく考えたらトランザクション処理で
// トランザクション開始
$db->exec('begin');のexecの返り値がfalseになったときの処理ってした方がよいのでしょうか?もしした方がよい場合、処理の方法を教えてください。
https://www.php.net/manual/ja/pdo.begintransacti …
マニュアルの
return $this->transactionCounter >= 0;
で大丈夫でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- 情報処理技術者・Microsoft認定資格 応用情報処理技術者試験のシステム利用率の計算について 2 2022/03/28 07:43
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- Excel(エクセル) VBAのエラーが直せません 4 2023/06/12 22:10
- IT・エンジニアリング ドメイン駆動設計の値オブジェクトについて質問 1 2023/05/13 02:50
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- SQL Server SQL ServerでDBを構築。これは開発? 4 2022/05/28 14:10
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
例外処理
-
Function内でのMySQLデータベー...
-
VBAをつかってクエリの情報を抽...
-
Microsoft Access DBへの接続
-
Ruby構文で三つのテーブルを作...
-
PHPの記述で値が取れません。
-
DBから抜き出した値を表示する方法
-
SQL Serverからのvarchar型のデ...
-
php テーブルを作れない
-
phpのエラーについてです
-
Resource id #3 をフィールドの...
-
連想二次元配列のUNIXTIMEでの...
-
DBに入力されている値のセレ...
-
PHP 勤務時間の合計を出したい
-
sprintf関数での%Sが分かりませ...
-
XAMMPが起動しません。
-
PHP+MySQLで、日時を比較して抽...
-
出勤表の作り方
-
mysql_fetch_objectのエラー
-
excelvbaのリセットの仕方。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー3131 FROM 句の構...
-
VBAをつかってクエリの情報を抽...
-
テキストボックスに入れた内容...
-
エラー3011
-
SQL文が実行できません
-
SELECT文を発行して、ACCESSよ...
-
in 'where clause'のエラーの理由
-
phpのPEARのMDB2を使って出たエ...
-
Call to undefined method MDB2...
-
LocalのNotesメールDBをVBAで参...
-
PHP内でUPDATE構文を使用してい...
-
単純ですが、意外と穴?なデー...
-
DAOでデータベースを二つ開くに...
-
pearがエラーになる
-
見られたくないファイル
-
PEAR でprepareメソッドがエラーに
-
SQL文の実行に失敗しました???
-
年月の情報だけを基に階層構造...
-
例外処理
-
データ入力条件
おすすめ情報
なるほど。ありがとうございます。
では、if文を省いたもので大丈夫でしょうか?
よくかよく考えたらトランザクション処理で
// トランザクション開始
$db->exec('begin');のexecの返り値がfalseになったときの処理ってした方がよいのでしょうか?もしした方がよい場合、処理の方法を教えてください。
https://www.php.net/manual/ja/pdo.begintransacti …
マニュアルの
return $this->transactionCounter >= 0;
で大丈夫でしょうか?