2014年9月3日水曜日

[PHP]MySQL接続してクエリ発行

PDO使ってSQL文はプリペアドステートメントで書くって一択でいいんですね(基本的には)。
mysql関数?エスケープ処理?なにそれ?

参考書も最初からプリペアドステートメントで教えてくれればいいのに…。
SQLを動的に書く場合(テキストボックスに入力された情報をWHERE条件にするとか)は、
SQLインジェクション対策としてエスケープ処理が必要だよーと参考書では書いてありますが
抜け穴が出ないようなエスケープ処理をあれこれ考えたり調べたりするのは無駄骨です。
深く考えずにプリペアドステートで書きましょう。
(少なくとも初心者向けの参考書は「とりあえずプリペアドステートメント使っとけ」でいいと思うんだ)

WHEREの他にもORDERや、INSERT文のVALUEなんかでもプレースホルダ使えます。

詳しくは「PHP PDO プリペアドステートメント」とか「PHP プレースホルダ」あたりでググると幸せになれるかと。

2014年8月28日木曜日

[VBA]Excel4.0マクロの資料

古のExcel4.0マクロ。時折メンテ依頼を受けることがあります。
見ればなんとなくわかりそうな感じですが、確認したいときもあるわけで。


Microsoftのサポートページに関数の説明がいくつか残っている模様。

http://www.microsoft.com/ja-jp/search/SupportResults.aspx?form=mssupport&q=%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%92%E4%BD%BF%E3%81%8A%E3%81%86


あとは英語版のリファレンスがDLできます。
http://www.microsoft.com/en-us/download/details.aspx?id=19243

拡張子.sitで圧縮されているのでWindowsだと解凍用ソフト(Stuffit Expander 等)が必要。


どっちもMac向け資料になってるけど。



2014年8月27日水曜日

[PHP]配列データをCSV出力

下記のPHPを読み込めばテストデータのCSVがダウンロードされる。

fputcsv() で配列からCSVのテキストに変換してくれる。
配列中にダブルクォーテーションやカンマが入ってもOK。

//テストデータ
$arr = array(
 array('1', '田中', 'あいうえお'),
 array('2', '佐藤', 'かきくけこ'),
 array('3', '山田', 'さしすせそ'),
 array('4', '今"野', 'たち,つてと')
);

//出力用ヘッダ
header('Content-Type: text/csv; charset=Shift_JIS');
header('Content-Disposition: attachment; filename=data.csv');

//直接DL
$fp = fopen('php://output', 'w');

//配列ループ
foreach($arr as $arr_row){
 mb_convert_variables('SJIS-win', 'UTF-8', $arr_row); //UTF-8をSJISに変換
 fputcsv($fp, $arr_row); //配列をCSVに変換
}

fclose($fp);
CSVファイルをExcelで開くことを想定するとShift-JISにエンコードが必要。
(Excel2010ならUTF-8のままでも文字化けせずに開いてくれるが、Excel2003で開かれないとも限らないので。。。)

実行するPHPファイルがUTF-8(BOM付き)だと、 mb_convert_variables() で正しくエンコードされないので注意。(BOM外し忘れててハマりました)
文字コードをShif-JISに変更してもファイル頭に「・ソ」がついてるから、BOMが残ったままShift-JISになってるんだろうな。

mb_convert_variables() は mb_convert_encoding() と違って返り値を拾わなくてOK。