Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > данные из postgresql в openldap


Автор: toni3d 8.7.2013, 14:50
взять данные из таблицы Postgresql и добавить в LDAP

Код


#подключаемся к таблице user_accounts1
$query = "SELECT * FROM user_accounts1";

$sth = $dbh->prepare($query);
$rv = $sth->execute();
if (!defined $rv) {
  print "При выполнении запроса '$query' возникла ошибка: " . $dbh->errstr . "\n";
  exit(0);
}

while ($ref = $sth->fetchrow_hashref()) {
  ($name, $mail) = ($ref->{'login'}, $ref->{'email'});
  #print "$name\t$mail\n";
}


$ldap = Net::LDAP->new($server);
$mesg = $ldap->bind($binddn, password=>$passwd);
$result = $ldap->add("cn=$name,ou=addressbook,dc=mydomain,dc=com", 
                attr => [ 'cn' => $name,
                          'sn' => 'Smith',
                          'givenName' => $name,
                          'mail' => $mail,
                          'objectclass' => [ 'person', 'inetOrgPerson']
                        ]
           );
           
$ldap->unbind;
$sth->finish();
$dbh->disconnect();



в итоге добавляет одно значение и все
подскажите как правильно организовать цикл

Автор: arto 8.7.2013, 15:11
читать и писать одновременно, а не сначала прочитать по одной строке, и записать последнюю в ldap.

Автор: toni3d 8.7.2013, 15:45
Цитата(arto @ 8.7.2013,  15:11)
читать и писать одновременно, а не сначала прочитать по одной строке, и записать последнюю в ldap.

спасибо
самое интересное что я пробовал, но так как изучаю недолго не был уверен так надо

Код

while ($ref = $sth->fetchrow_hashref()) {
  ($name, $mail) = ($ref->{'login'}, $ref->{'email'});
  #print "$name\t$mail\n";
$result = $ldap->add("cn=$name,ou=addressbook,dc=mydomain,dc=com", 
                attr => [ 'cn' => $name,
                          'sn' => $name,
                          'givenName' => $name,
                          #'homePhone' => '555-2020',
                          'mail' => $mail,
                          'objectclass' => [ 'top','person', 'inetOrgPerson']
                       ]
           );
  }


работает через тестовое виндовое подключение, позже проверю на freebsd сервере
есть подозрение что будут траблы с кодировкой русских букв

Автор: noize 9.7.2013, 10:01
используйте прагмы

use strict;
use warnings;

иначе дров наломаете.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)