Не можете ли подсказать, как выполнит элементарную вещь на PERL+DBI?
так работает:
SELECT * FROM testtable WHERE username_t="pupkin"а если:
Sa="pupkin";
SELECT * FROM testtable WHERE username_t="$a"
- то не работает! Перепробовал все кавычки-конкатенации и пр. В инете конкретного ничего не нашел.
Подскажите, пожалуйста.
Отцы родные! Не оставьте в беде! Как это можно сделать?
Уже пропадает вера в PERL ....
perldoc DBI
на предмет bind variables
>Не можете ли подсказать, как выполнит элементарную вещь на PERL+DBI?
>так работает:
>SELECT * FROM testtable WHERE username_t="pupkin"
>
>а если:
>Sa="pupkin";
>SELECT * FROM testtable WHERE username_t="$a"
>- то не работает! Перепробовал все кавычки-конкатенации и пр. В инете
>конкретного ничего не нашел.
>Подскажите, пожалуйста.
Вот пример кода:
use DBI;
$dsn = "dbi:$db_driver:dbname=$db_name";
$dbh = DBI->connect($dsn, $db_user, $db_password);
my $sth = $dbh->prepare("SELECT u.id,u.name,u.status FROM users u,country c where c.id = u.country_id and u.id = $user_id");
if (!$sth) { $err_mes = $sth->errstr; } else {
if (!$sth->execute) {$err_mes = $sth->errstr; }
}
($user_id,$user_name,$user_status) = $sth->fetchrow_array;
Вообще-то там строка, а не int. Насколько я понимаю, users.id это именно int.Строки в запросе нужно брать в кавычки. Желательно, в одинарные. То есть получаем что-то типа:
SELECT * FROM testtable WHERE username_t=q($a);
:-)
Толкового НИЧЕГО не услышал. Неужели так трудно сравнить со переменной-строкой?
Буду пытаться сам, спасибо за желание помочь.
Наверное потому что не слушал. Очень трудно помочь человеку
который не хочет читать документацию :)
>:-)
>Толкового НИЧЕГО не услышал. Неужели так трудно сравнить со переменной-строкой?
>Буду пытаться сам, спасибо за желание помочь.
Что за ерунда!?
Тебе же говорят, если ты пользуешь perl+dbi, то
если в перл-скрипте ...prepare("select * from tab where name = '$name'") - то Perl сам подставит значение переменной и передаст БД корректный запрос. Что у тебя не получается????
На самом деле не совсем так :)
Самая правильная конструкция будет такая:$my_string = 'Some string with different characters';
$query = 'Select * from table where field=:string';
$sth = $dbh->prepare($query);
$sth->bind_param(':string',$my_string);
$sth->execute();|| die ... Подставить по вкусу :)
ребята , спасибо!
Но такая кострукция не работала!
$a="text1";
$dsn = "DBI:$driver:database=$database;host=$hostname";
$dbh = DBI->connect($dsn, $user, $password);
$sth = $dbh->prepare( q{
SELECT * FROM testtable WHERE username_t='$a'
}) || die "Can't prepare statement: $DBI::errstr";Я попробовал конструкцию уважаемого konst - подставил строку - все ок.
$dsn = "dbi:$db_driver:dbname=$db_database";
$dbh = DBI->connect($dsn, $db_user, $db_password);
my $sth = $dbh->prepare("SELECT * FROM testtable WHERE username_t = '$a'");
Чудеса!
Конструкцию уважаемого bladerunner не пробовал - но все равно спасибо.
за помощь. Все перерыл, прежде чем заработало.
Еще раз громадное спасибо!