The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Запрос к MySQL из Perl"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"Запрос к MySQL из Perl"  
Сообщение от max1991 email(??) on 16-Окт-08, 12:12 
Привет всем, помогите пожалуйста, столкнулся с проблемой, самому решить не удалось.
Структура таблицы:
---------------------------------------
| id | ip | local_or_not |
---------------------------------------
| 1 | 192.168.1 | 1 |
--------------------------------------
| 2 | 192.168.2 | 0 |
--------------------------------------
| 3 | 192.168.2.2 | 1 |
--------------------------------------

Нужно выполнить запрос к БД из скрипта, в MySQL он выглядет так :
mysql> SELECT local from local_nets WHERE LENGTH(ip) IN (SELECT MAX(LENGTH(ip)) FROM local_nets WHERE '192.168.2.2' LIKE CONCAT(RTRIM(ip),'%'));
И он работает, а из перла не получается, ругается на синтаксическую ошибку, вот текст скрипта:
##########################################
#!/usr/bin/perl

use Mysql;
$host="127.0.0.1";
$database="test";
$usr="test";
$pass="test";

$dbh = Mysql->Connect($host,$database,$usr,$pass) or print $Mysql::db_errstr;
$dbh->SelectDB($database) or print $Mysql::db_errstr;
print "Connecting to database...\n";
$table="local_nets";
$ip="192.168.2.2";
$sth = $dbh->query("SELECT local FROM $table WHERE LENGTH(`ip`) \
IN (SELECT MAX(LENGTH(ip)) FROM $table \
WHERE $ip like CONCAT(RTRIM(ip),'%')");
$w= $sth->fetchrow();
if ($w=="")
{
$w="0";
}
print "$w\n";

Ругается на кусок '$ip like CONCAT(RTRIM(ip),'%')', подозреваю, что проблема в кавычках, но решить самому не получилось.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Запрос к MySQL из Perl"  
Сообщение от Arpo email(ok) on 16-Окт-08, 12:43 
>[оверквотинг удален]
>WHERE $ip like CONCAT(RTRIM(ip),'%')");
>$w= $sth->fetchrow();
>if ($w=="")
>{
>$w="0";
>}
>print "$w\n";
>
>Ругается на кусок '$ip like CONCAT(RTRIM(ip),'%')', подозреваю, что проблема в кавычках, но
>решить самому не получилось.

попробуй так
CONCAT(RTRIM(ip),'\%')")
мало ли...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Запрос к MySQL из Perl"  
Сообщение от max1991 email(??) on 16-Окт-08, 15:36 
спасибо за помощь, так как хотел, разобраться не получилось,склоняюсь к выводу, что через perl mysql-ю вложенный запрос передать нельзя, решил вот таким способом:
$sth1 = $dbh->query("SELECT max(length(`ip`)) from $table \
where '$ip' like concat(rtrim(`ip`),'%')");
$w1= $sth1->fetchrow();
$sth = $dbh->query("SELECT `local` from $table \
where length(`ip`)='$w1' \
and '$ip' like concat('%',trim(`ip`),'%')");
$w= $sth->fetchrow();
if ($w=="")
{
$w="0";
}
print "$w\n";


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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