Модератор: Модераторы разделов
skeletor
Сообщения: 1224
Сообщение
skeletor » 21.04.2008 11:52
Есть скрипт на perl. Где-то в средине скрипта нужно выполнить команду, точнее получить вывод от команды
Код: Выделить всё
ID=`echo "select * from TABLE where FIELD like '%$1%'" | mysql DB_NAME -uDB_USER -pUSER_PASS | grep -v id`
то есть, использовать результат переменной ID дальше в скрипте. Пробовал использовать system, но куда она возвращает результат?
brandy
Сообщения: 41
ОС: Gentoo
Сообщение
brandy » 21.04.2008 11:54
Код: Выделить всё
use strict;
my $id=`echo \"select * from TABLE where FIELD like '%$1%'\" | mysql DB_NAME -uDB_USER -pUSER_PASS | grep -v id`;
print "result is: $id";
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows
Сообщение
allez » 21.04.2008 11:58
Вы вполне можете использовать в перловом скрипте обратные кавычки или оператор qx() .
brandy
Сообщения: 41
ОС: Gentoo
Сообщение
brandy » 21.04.2008 12:01
И еще: $1 - с этим поэксперементируйте, и возможно еще что-то кроме символа " придется экранировать в виде \"
Serik
Сообщения: 149
ОС: SuSE Linux
Сообщение
Serik » 21.04.2008 12:01
Для такой команды имхо лучше подключиться к БД и нормально выполнить все что нужно.
skeletor
Сообщения: 1224
Сообщение
skeletor » 21.04.2008 12:10
brandy ,
allez не работают
.
Serik Это всё хорошо, но мне нужно ещё и отфильтровать вывод запроса. Как мне это сделать? Как потом прикрутить контейнером grep?
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian
Сообщение
diesel » 21.04.2008 12:16
а почему DBI не использовать??? perl'ом можно сделать все что умеет делать grep .....
skeletor
Сообщения: 1224
Сообщение
skeletor » 21.04.2008 12:35
А не могли бы помочь написать скрипт?
sarutobi
Сообщения: 676
Статус: Добрость и скромнота
ОС: Debian 5, FreeBSD 6.2/8.0
Сообщение
sarutobi » 21.04.2008 12:56
skeletor
поясните пожалуйста что именно вы хотите сделать. Обычно работа с БД идет через API БД, предоставляемого языком (для PERL - DBI + DBD),
Fire and water, earth and sky - mistery surrounds us, legends never die!
skeletor
Сообщения: 1224
Сообщение
skeletor » 21.04.2008 13:10
Суть такова : скрипт меняет пароль юзера в БД. Сначало вычисляю ID юзера, затем по нужному ID меняем ему пароль в базе.
ПС. У меня не установлены perl-модуль DBI. Как его установить?
sarutobi
Сообщения: 676
Статус: Добрость и скромнота
ОС: Debian 5, FreeBSD 6.2/8.0
Сообщение
sarutobi » 21.04.2008 13:31
установить можно через менеджер пакетов - этот модуль присутсвует во всех дистрибутивах. Кроме него потребуется модуль DBD для соответсвующей базы (mysql в Вашем случае)
если логин уникальный (судя по приведенному запросу) то выполнение поставленной задачи сводится к запросу
Код: Выделить всё
update table set password='NEWPASS' where LOGIN='login'
Вы используете в запросе Like 'login' - это излишняя нагрузка на сервер и потенциальная дыра в безопасности (для конкретно этой задачи), используйте прямое сравнение.
Fire and water, earth and sky - mistery surrounds us, legends never die!
minoru-kun
Сообщения: 621
ОС: Debian GNU/Linux
Сообщение
minoru-kun » 21.04.2008 17:50
Код: Выделить всё
use DBI; #зависит от libdbi-perl
use DBD::mysql;
$dbh = DBI -> connect ("dbi:mysql:dbname[:host]", "$db_username", "$db_password); #начинаем SQL-транзакцию
<...>
$dbh -> do ("update table set password='$new_password' where LOGIN='$login'");
<...>
$dbh -> disconnect();
Только давай договоримся, что не будем создавать по транзакции на каждый запрос, хорошо?
skeletor
Сообщения: 1224
Сообщение
skeletor » 24.04.2008 18:27
Разобрался! Всем спасибо.