- ベストアンサー
プログラム内のINSERT文が実行されない
- プログラム内のINSERT文が実行されない原因を調査するためのツールはありますか?
- 問題があるとしたら、プログラムの中にある可能性があります。具体的な原因が分かりません。
- プログラムの中で実行されるSQL文が正しくない可能性があります。データベースで実行して成功したことから、問題はプログラム側にあると考えられます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
当方、PHPはまったく触れたことがありませんが、 一般的な観点からの回答をさせて頂きます。 まず、戻り値 $num とif文の件からですが、 $db がどんな型のオブジェクトなのか質問文からわかりませんので executeが何を返すのかを調べて見れませんが、 変数名から推測すると追加された行(レコード)数を返すのではないでしょうか? 通常、だいたいのプログラミング言語では 数値の場合 0 が 偽 でそれ以外が 真、 オブジェクトなどであれば空やnullが 偽 でなにかあれば 真、 と評価されるかと思います。 if文はnotで真偽を反転していますので、 $numが偽であればif文内を実行することになりますね。 # とはいえ、表示しても空だったということですので、 # 追加行数では無くて別のオブジェクトかもしれませんが。 次に、DBサーバーでSQLを実行して問題なく追加されたとのことですが、 これは、実行前には行が存在せず、SQL実行後に行追加されたことが確実でしょうか? または、複数回実行することでエラーが起きるなどはないでしょうか? # たとえば、SELECTの結果レコードが無く、0行追加で正常に実行終了した、 # というようなことは起きていないでしょうか。 # もしくはSQLでデータを追加済みのためプログラムでは # 一意制約や主キー制約によってエラーが出てしまう、などないでしょうか。 そのあたりも特に問題なければ、 質問文に引用されている箇所のSQL文を、 たとえばSELECT以降のみを含む内容で実行してみてexecuteの戻りに抽出結果が戻るかどうかを見てみるとか、 (SELECTを含まない)定型のINSERTを行わせてみて行追加出来るかなど、 領域を絞って問題を特定していくしかないのではないでしょうか。 ちなみに、質問分に記載のコードで、SQL文が括弧で囲んでありますが これは元コードそのままなのでしょうか? 括弧が文字列の引用符になるんでしょうか? # $sql を出力してみると意図したとおりの内容でしょうか。