2005/02/10
MySQLって奥が深い?
  • データをフォームに表示するときに "&" を "&" で変換しないとだめぽ。
    → s/&/&/g;
  • "」を書くときは DB に入れる前に自前で「""」としないとだめぽっつーかエラーになる。(汗)
    → s/"/""/g;

このあたりの仕様ってどっかに書いてあるんだろうか・・・。
書いてありそうだが見つけられない、というのが正直。

で、以下はその再現性用サンプル。
まさかこんな事でひっかかるとは。(汗)

    # まずはつっこみの新しい順にグループ化したターゲット番号を 10個拾う
    my $mysql_query = "SELECT target FROM tsukkomi GROUP BY target ORDER BY lastupdate DESC LIMIT 0,10";
    my $mysql_sth = execute_query($mysql_db, $mysql_query);
    my @TARGET_LIST;
    while (my $TMP_HASH = $mysql_sth->fetchrow_hashref) {
        push(@TARGET_LIST, $TMP_HASH->{target});
    }
    $mysql_sth->finish;
    
    # 次にそのターゲット番号の記事タイトルを取る
    $mysql_query = join(', ', @TARGET_LIST);
    $mysql_query = "SELECT num,title FROM diary WHERE num IN ($mysql_query)";
    my $mysql_sth = execute_query($mysql_db, $mysql_query);
    my %TITLE_LIST;
    while (my $TMP_HASH = $mysql_sth->fetchrow_hashref) {
        $TITLE_LIST{$TMP_HASH->{num}} = $TMP_HASH->{title};
    }
    $mysql_sth->finish;
    
    # 最後に配列として保存。連想配列にしてしまうと順序がわからなくなる。(汗)
    my @RET_LIST;
    foreach (@TARGET_LIST) { push(@RET_LIST, "$_<>$TITLE_LIST{$_}"); }
    
    # 最後の締め。
    $mysql_db->disconnect;
    
    return @RET_LIST;

書いてあった。_| ̄|○
というわけでこうしてみた。
s/("|'|\\)/\\$1/g;
ちなみにこの変換用ルーチンをブロック単位で作っているが、フォームデータをそのまま利用する場合もあるので get_formdata() にそのまま放り込むわけにも行かず。
クエリー発行前の部分にでも入れるか。

その後、エラートラップの良い方法も見つけたので試しに実装してみる。
なかなか良い感じ。
ただしこのエラートラップ、上手いこと回避させないとレコードが取れなかったときもエラーになるので要注意。

  • G兄:ちなみにつっこみの部分はまだ未対応。(ぉ→変換
QRコード
携帯サイト試験運用
https://griffonworks.net/nikki/cgi-bin/k.cgi
1行板

備忘録
  • 無し
物欲リスト
  • Canon RF50mm F1.2L USM
  • SIGMA 20mm F1.4 EF Art
  • ニンバス チヌーク
  • OCB-1 ST II
ツーリング ドライブ兼野外撮影予定リスト