The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"perl+dbi - если в запросе переменная"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"perl+dbi - если в запросе переменная"
Сообщение от Дима emailИскать по авторуВ закладки on 30-Июл-03, 16:27  (MSK)
Не можете ли подсказать, как выполнит элементарную вещь на PERL+DBI?
так работает:
SELECT * FROM testtable WHERE username_t="pupkin"

а если:
Sa="pupkin";
SELECT * FROM testtable WHERE username_t="$a"
-  то не работает! Перепробовал все кавычки-конкатенации и пр. В инете конкретного ничего не нашел.
Подскажите, пожалуйста.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "perl+dbi - если в запросе переменная"
Сообщение от Дима emailИскать по авторуВ закладки on 30-Июл-03, 17:59  (MSK)
Отцы родные! Не оставьте в беде! Как это можно сделать?
Уже пропадает вера в PERL ....

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "perl+dbi - если в запросе переменная"
Сообщение от bladerunner emailИскать по авторуВ закладки on 30-Июл-03, 18:44  (MSK)

perldoc DBI
на предмет bind variables
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "perl+dbi - если в запросе переменная"
Сообщение от konst emailИскать по авторуВ закладки on 30-Июл-03, 19:16  (MSK)
>Не можете ли подсказать, как выполнит элементарную вещь на 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;
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "perl+dbi - если в запросе переменная"
Сообщение от XMan Искать по авторуВ закладки on 30-Июл-03, 21:55  (MSK)
Вообще-то там строка, а не int. Насколько я понимаю, users.id это именно int.

Строки в запросе нужно брать в кавычки. Желательно, в одинарные. То есть получаем что-то типа:

SELECT * FROM testtable WHERE username_t=q($a);

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "perl+dbi - если в запросе переменная"
Сообщение от Дима emailИскать по авторуВ закладки on 31-Июл-03, 11:12  (MSK)
:-)
Толкового НИЧЕГО не услышал. Неужели так трудно сравнить со переменной-строкой?
Буду пытаться сам, спасибо за желание помочь.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "perl+dbi - если в запросе переменная"
Сообщение от bladerunner emailИскать по авторуВ закладки on 31-Июл-03, 14:18  (MSK)
Наверное потому что не слушал. Очень трудно помочь человеку
который не хочет читать документацию :)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "perl+dbi - если в запросе переменная"
Сообщение от konst emailИскать по авторуВ закладки on 31-Июл-03, 14:31  (MSK)
>:-)
>Толкового НИЧЕГО не услышал. Неужели так трудно сравнить со переменной-строкой?
>Буду пытаться сам, спасибо за желание помочь.
Что за ерунда!?
Тебе же говорят, если ты пользуешь perl+dbi, то
если в перл-скрипте ...prepare("select * from tab where name = '$name'") - то Perl сам подставит значение переменной и передаст БД корректный запрос. Что у тебя не получается????


  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "perl+dbi - если в запросе переменная"
Сообщение от bladerunner emailИскать по авторуВ закладки on 31-Июл-03, 14:37  (MSK)

На самом деле не совсем так :)
Самая правильная конструкция будет такая:

$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 ... Подставить по вкусу :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "perl+dbi - если в запросе переменная"
Сообщение от Дима emailИскать по авторуВ закладки on 31-Июл-03, 15:10  (MSK)
ребята , спасибо!
Но такая кострукция не работала!
$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 не пробовал - но все равно спасибо.
за помощь. Все перерыл, прежде чем заработало.
Еще раз громадное спасибо!

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру