On Thu, 12 Apr 2012 10:53:00 +0300 WK <wanradt@gmail.com> wrote:
Hi!
My little application stand whole night and when on morning user made first request, app did not connect properly to Database. Error was like:
DBD::mysql::db do 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 '&amp;amp;amp;amp;amp;amp;amp;#39;utf8&amp;amp;amp;amp;amp;amp;am' at line 1 at /usr/local/share/perl/5.12.4/Dancer/Plugin/Database.pm line 198. /usr/local/share/perl/5.12.4/Dancer/Plugin/Database.pm around line 198 195 return; 196 } elsif (exists $settings->{on_connect_do}) { 197 for (@{ $settings->{on_connect_do} }) { 198 $dbh->do($_) or Dancer::Logger::error( 199 "Failed to perform on-connect command $_" 200 ); 201 }
Uh-oh - that's probably not good :) Do you have any on_connect_do settings defined in your app's config?
As i use also Plugin::EscapeHTML with automatic_escaping: 1, it seems that there is some problem with 2 of them together. At least there is made some weird escaping. Or?
That would seem to be the likely culprit, but at a quick glance, I don't see why that should be happening. D::P::EscapeHTML's automatic escaping stuff is in a before_template_render hook, and steps through the template params passed to it. Ah, wait. I think that's it - Dancer::Template::Abstract shoves the config information into the template tokens hashref: 148 $tokens->{settings} = Dancer::Config->settings; However, as Dancer::Config->settings returns us the actual hashref, we're storing a reference; D::P::EscapeHTML, if automatic_esaping is enabled, will follow that reference, trampling all over the values of the settings. That, needless to say, is Not Good, and is the cause of the problem. I think the proper fix is for me to change Dancer::Template::Abstract to copy the settings rather than storing a reference - e.g.: $tokens->{settings} = Clone::clone(Dancer::Config->settings); In the meantime, I'll also release a new version of D::P::EscapeHTML which will skip a template tokens key named "settings". Thanks for spotting & reporting this one :) Cheers Dave P -- David Precious ("bigpresh") <davidp@preshweb.co.uk> http://www.preshweb.co.uk/ www.preshweb.co.uk/twitter www.preshweb.co.uk/linkedin www.preshweb.co.uk/facebook www.preshweb.co.uk/cpan www.preshweb.co.uk/github