mysql_real_escape_stringでハマる。

なんちゃってEC制作メモ。
著者検索部分完了して、やっぱりエラー。
『Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2) ~』
うーん。良く意味がわからない。で、まずはsql文を吐き出させて、見てみると、エスケープしてる検索用文字が” “。値が渡ってない。
そうか!mysql_real_escape_stringが悪いんだ!と思い、お馴染みの『htmlspecialchars』に変更。ちゃんとENT_QUOTESにして。
OK!治った!俺すごい!

と思ったんだけど、そもそもmysql_real_escape_string と htmlspecialchars ってどう違うんだ?と思い調べる。
わかったのは、簡単に言うとブラウザ出力のためのサニタイジングに『htmlspecialchars』を使い、sql(格納するデータ以外でデータベースに渡す文字)向けのサニタイジングには『mysql_real_escape_string』を使う。逆や併用は意味がないか、誤動作する場合がある。

俺ダメじゃん!
で、もう一度真剣にググってたら、同じエラー解説があった。俺のバカ。
 つまり、PHPのsql関連命令(この場合はmysql_~)は「データベースに接続していないと動かない」
「mysql_~」が呼び出されると、データベース接続を確認?して、なければその場(行)で接続しようとする。当然裸(パスワードなど持たずに)で接続しようとするので、接続できない。ついでに値の受け渡しもできない。
 エラーにならない場合もあるそうだけど、明示的に命令して継続的な接続をしているなら良いんだけど、大多数は「デフォルト接続がオン(パスがなくても接続できる)」状態になっているから接続できてるだけ。セキュリティ注意!
そういうわけで、エラーが出たってことは接続設定が一応(この場合だけは)大丈夫だったってこと。
結局解決策は「データベース接続命令部分を前に移動する」だけ。いつもどおり、ハマり具合と関係なく解決策はカンターン!
参考書の通り打ちこんだんだけどなー。評判通りこの本は「本の通りやっても動かない」。でも文句は全くない。俺の気のせいかもしれないけど、著者さんの意図があるんじゃないかと思っている。「それぐらい書いてなくてもわかるだろ」ってとこと、普通にやってれば苦労するはずのところは、「親切で書いてない」んじゃないかと思ってる。実際今回も貴重な知識が手に入ったし。問題なし。

なんちゃってECサイト制作

ウェブデザイン技能検定の回答発表があったので自己採点。2問間違い。名前書き間違いとかしてなければ少なくとも学科は受かってるはず。良かった。

というわけで、今日からECサイト制作を再開してるわけです。参考にしている(というかそのまま打ち込んでいる)のは以前にも書いたけどこの本

今日も気合入れてやって2ファイルしか進んでない。難しい。理解しながらと言いたいけど、なんとなーく各スクリプトの動きがわかるかなーって程度の理解でひたすら打ち込み。
で、動かしてみるとぜんぜん駄目なのでコード見ながら、動作見ながら推理して修正を繰り返す。その結果ようやく全部の意味がわかる感じ。自分でも勉強になってるのか疑問な、かなり迂遠なことやってる自覚はあるんだけど、やっぱり修正してコードがちゃんと期待通り動いたり、コードの意味がわかって来たりするとすごく楽しいです。これは勉強というより遊びだな。

しかし資格試験の勉強なんかより脳味噌酷使するのは確かで、試験勉強中は大丈夫だった頭痛が再発。薬をがぶ飲みしながらコード打ってます。

今日はeclipseとZenの環境整備や慣らし(僕のね)もしながらだったのでスローペースだったってのもある。どっちも良い!なのでeclipseにもZenCording入れることになりそう。
その前にeclipseの64ビット化したいな。迂闊にもさっき32ビットだって気がついた。使っててちょっと引っかかる感じや起動に(比較的ね。比較対象はサクラw)時間かかる感じ が気になって色々見てたらわかりました。

64ビットeclipseはjava周りがちょっと不安定との噂もあるので、良く慣れてから取り掛かろうと思ってます。