いやあ、Web 上の某情報を自動で取ってきて DB 化するという処理を、やっつけでパパッと Perl スクリプトで書いて実行してたら、
DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ...
なエラーが。
はい。シングルクォーテーションのエスケープ漏れです。(^^;
今回、ベタで SQL 書いて、直接 DBD/DBI で execute してるからねえ。ちゃんと手動でエスケープしないと。
INSERT 文にセットする前に、
$value =~ s/\'/\'\'/g;
とかね。(シングルクォーテーションを二重に)
そしたら今度は、別のスクリプトで、
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
なエラーが・・・とほほ。
シングルクォーテーションを含んだ文言を echo してプログラムに食わせる処理を Perl 内で実行してたんで、そこで引っかかってる。(^^;
ちゃんと、
$value =~ s/\'/\\\'/g;
しなくちゃいけませんなあ。(シングルクォーテーションの前に \ を)
ちゃんと作る時は、この辺の処理は自前の関数で処理するようにしてるんで、ちょっとテスト的にやっつけでチャチャっと作るとついつい忘れてしまいますなあ。
と、自責の意味で書いておく。
コメントする