2010-12-04 7 views
1

データベースへの接続に問題がある場合、これは単なる問題ですか? (私は、データベース接続が成功したかどうかを調べる)。私は私のクエリは常に有効であることを確認するための十分なチェックを行うと仮定すると、次のチェックをスキップして、これまで大丈夫です:

($ stmtは= $ DB->準備($クエリ))であれば { //よりコード }

とだけではなく、実行します。

$ stmtは= $ DB->準備($クエリ); は//より多くのコード

私はトランザクションがこれは大丈夫になるかもしれないが、私のデータベーステーブルがトランザクションをサポートしていないことを考えています(私が書くよりも多くデシベルの読みをやっているので、私はMyISAMテーブルを使用しています) 。

ありがとうございます!

+0

読み書きにかかわらず、MyISAMをほとんど使用しないでください。データについて確かめたい場合は、外部キーとトランザクションが必要です。 –

+0

MyISAMの使用はいつ適切だと思いますか?全文検索のサポートが必要な時以外の時間? – hithere

+0

InnoDBは行をロックしますが、MyISAMはテーブル全体をロックします。 MyISAMはGoDaddyのデフォルトのデータベースタイプです。 MyISAMは、システムを使用している人が1人または少数しかいないおもちゃの問題に完全にうまく使用できます。同時に多量の同時使用を期待することはありません。 – DragonLord

答えて

1

ここでは、タンデューは誤解を招くほどの誤解を招くことがあります。

使用しているデータベース抽象化レイヤー(mysqliを使用しているもの)にかかわらず、実際には、準備されたクエリがエミュレートされているかどうか、またはデータベースレベルでネイティブに実行されているかどうかに依存します。準備されたクエリは、基礎となるデータベースエンジンがそれを「準備」できなかった場合に失敗します。

データベース接続が成功したかどうかは関係ありません。

あなたは絶対にする必要があります。 prepare()コールの戻り値を確認してください。プログラミングのバグがあれば、それは失敗します。別のレベルのアプリケーションに問題がある場合、それは失敗します。それは戻り値の全体のポイントです。

いつもうまくいっているとすれば、失敗したクエリの危険性があります。その結果、データが失われる可能性があります。

明示的に明確にするには、クエリが失敗したときにいつでも結果を確認することが重要です。あなたは知らない...だから常に。

+0

ああ、私はあなたが意味するものを参照してください。回答いただきありがとうございます。私はあなたの答えを正しいものとして選んだ。この場合、DB接続を処理するためのラッパークラスを作成すると、それに応じてprepare()関数を修正すると(それは失敗した準備を処理します)、それは受け入れられる方法でしょうか? – hithere

+0

状況によっては、おそらくそれを処理するための許容可能な方法です。ただし、実行に失敗した前のクエリの結果を使用している場合は、孤立したデータを取得する可能性があるため、注意してください。 – Michael

関連する問題