вот запрос к базе Mysql из скрипта Perl:$sth1=$dbh->prepare( q{ UPDATE list SET statusdb="${statusdb}" } ) or die "Can't prepare";
$sth1->execute;
$sth1->finish();по нему в базу вставляется '${statusdb}'
а мне бы нужно чтобы вставлялось текущее значение переменной ${statusdb}
например при ${statusdb}='OK', мне нужно в базе 'OK', а не '${statusdb}'как бы это сделать?
хелп оч. нужно
q{ это строка не интерполируется }
qq{ а эта интерполируется }ТЕ поставить второй вариант..
PS а кто будет эскейпить значения переменных???
>q{ это строка не интерполируется }
>qq{ а эта интерполируется }
>
>ТЕ поставить второй вариант..
>
>PS а кто будет эскейпить значения переменных???что есть "эскейпить переменные"? токо сразу не банте :)
Поищи в гугле на тему sql injection. Вот простой пример, берем твой запрос:
UPDATE list SET statusdb="${statusdb}"
Теперь предположим что $statusdb имеет такое содержимое:
";delete from veryimportanttable where "a"="a
Получаем:
UPDATE list SET statusdb="";delete from very_important_table where "a"="a"
Под "эскейпить переменные" понимается экранирование всех специальных(в данном контексте) символов, что приведет к подобному:
UPDATE list SET statusdb="\";delete from very_important_table where \"a\"=\"a"
Если используем DBI::MySQL, то там все просто - поддерживается prepare с биндом параметров и не нужно заморачиваться с экранированием.
>как бы это сделать?' --> " // q{ --> qq{
>хелп оч. нужно
$ man perlop
?
$ perldoc -q strings
СПСБ всем за помощь
ЗАРАБОТАЛО! :)
>вот запрос к базе Mysql из скрипта Perl:
>
>$sth1=$dbh->prepare( q{ UPDATE list SET statusdb="${statusdb}" } ) or die "Can't prepare";
>$sth1->execute;
>$sth1->finish();
>Идеологически правильно делать с placeholder-ами:
$sth1=$dbh->prepare( q{ UPDATE list SET statusdb=? } ) or die "Can't prepare";
$sth1->execute(${statusdb});
$sth1->finish();