woshidan's blog

あいとゆうきとITと、とっておきの話。

初心者が書いたphpからDBへSQL文を送るプログラムが動かない場合にやること

ITスキルアップキャンプの一期生がWebサービスを立ち上げているようで、めでたいですね……。

コードは書いても企業家的なスキルは本当にダメなのでうらやましいすごいでいっぱいです。

 

まあ、自分は目の前のもの完成させましょう。

その次はもうちょっと早くできるでしょ(輪講や研究が落ち着いたから……笑)。

 

で、今日は久しぶりにphpでDBへの問い合わせのプログラムを書いてみたのですが、

動くように書けたつもりでバグだらけだったという。

 

そのデバッグに時間がかかったので、チェック項目メモ。

 

初心者が書いたphpからDBへSQL文を送るプログラムが動かない場合にやること

SQL文をechoなどで出力

 特に変数がSQL文に入っている場合。クオーテーションの対応がなってなかったり、

 半角スペースが抜けていたりして、よろしくないSQL文が出来ていることがあります。

 

②var_dumpでmysql_db_query()などクエリの実行結果を出力

 そして、返り値と一緒にぐぐるとだれかが知恵袋で質問していたり、

 ブログにまとめていたりすることがある。

 

③以前動いたことのあるコードをコピー&ペースト

 人間の手入力を過信しない。

 また、慣れてないと関数の引数の順番や種類を忘れてきちんと書けたつもりになってるということはよくある。

 慣れてないうちは覚えるためにとにかく書きたいところだけれど。

 (私の場合)

 

④返ってきた結果の取り出し方が分かってない

 クエリを行った関数によって若干違うのですが、

 $result = mysql_db_query("DB名","SQL文");

 の$result['仮想配列の要素']としたらデータが取り出せる、と勘違いしていたり。

 この場合、$resultはresourceという型の中に仮想配列があった変数であって仮想配列ではなく、

 mysql_db_query()などでresourceからデータへアクセスする必要があります。

 

mysql...系は6月下旬あたりから廃止へ向かう流れになっているのですが、

とりあえず役割と失敗時の返り値について少し表にしておきます。

 

 

役割 関数 失敗時返り値  
サーバへの接続 mysql_connect("サーバ名","ユーザ名","パスワード") FALSE  
SQL文の実行 mysql_query("SQL文","リンク") FALSE  
SQL文の実行 mysql_db_query("データベース名","SQL文") FALSE  
サーバとの接続を閉じる mysql_close(mysqL_connect()の返り値) FALSE データの型
返された結果にアクセス mysql_fetch_array("結果") FALSE 配列
返された結果にアクセス mysql_fetch_assoc("結果") FALSE 仮想配列
     

習ったときはmysql_db_query()で習ったのだけど、6月下旬に出たPHP5.5.xでは廃止の流れらしいことがわかって

流行はともかく、言語のバージョンアップには気をつけないとと思いました。

 

今回のは、ほとんどmysql→mysqliの置換で動くようなのでそれに書き換えたらいいのだけどね。

 

まだ、直したいけどそんなこと言ってたら完成しないので、

続きを作らなきゃ……。