PDO使ってSQL文はプリペアドステートメントで書くって一択でいいんですね(基本的には)。
mysql関数?エスケープ処理?なにそれ?
参考書も最初からプリペアドステートメントで教えてくれればいいのに…。
SQLを動的に書く場合(テキストボックスに入力された情報をWHERE条件にするとか)は、
SQLインジェクション対策としてエスケープ処理が必要だよーと参考書では書いてありますが
抜け穴が出ないようなエスケープ処理をあれこれ考えたり調べたりするのは無駄骨です。
深く考えずにプリペアドステートで書きましょう。
(少なくとも初心者向けの参考書は「とりあえずプリペアドステートメント使っとけ」でいいと思うんだ)
WHEREの他にもORDERや、INSERT文のVALUEなんかでもプレースホルダ使えます。
詳しくは「PHP PDO プリペアドステートメント」とか「PHP プレースホルダ」あたりでググると幸せになれるかと。
KBYS's MEMO
プログラムなどの備忘録。VB、VBA、PHP、etc.
記述されている内容については責任を負いません。
2014年9月3日水曜日
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向け資料になってるけど。
見ればなんとなくわかりそうな感じですが、確認したいときもあるわけで。
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。
(Excel2010ならUTF-8のままでも文字化けせずに開いてくれるが、Excel2003で開かれないとも限らないので。。。)
実行するPHPファイルがUTF-8(BOM付き)だと、 mb_convert_variables() で正しくエンコードされないので注意。(BOM外し忘れててハマりました)
文字コードをShif-JISに変更してもファイル頭に「・ソ」がついてるから、BOMが残ったままShift-JISになってるんだろうな。
mb_convert_variables() は mb_convert_encoding() と違って返り値を拾わなくてOK。
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。
登録:
投稿 (Atom)