• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Mysql --> Dbi

  • Автор темы allexeym
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

allexeym

начал переделывать скрипт, который использовал модуль Mysql, под использование модуля DBI

и хотел спросить
как адаптировать
вот такое



Код:
@last_shop_id_arr=$sth->fetchcol(0);
@last_shop_name_arr=$sth->fetchcol(1);
@last_shop_subdir_arr=$sth->fetchcol(2);
@last_shop_divid_arr=$sth->fetchcol(3);
@last_shop_time_arr=$sth->fetchcol(4);


под модуль DBI?
 
V

Vovochka

Бу га га... :angry:

Не плохо было бы увидеть весь код запроса... При использовании DBI это скорее всего бедет выглядеть так:
Код:
$dbh = DBI->connect(....);
$sth = $dbh->prepare('SELECT * FROM .. WHERE id = ?');
$sth->execute($id);
while (@row = $sth->fetchrow_array) {
#И здесь обрабатываешь строчку из бд. Если так хочешь, можешь распихивать ее по своим массивам.
}

Но я предпочитаю вместо $sth->fetchrow_array использовать $sth->fetchrow_hashref
Так ты получишь ссылку на хеш, ключами которого будут поля таблицы, а значения - значения полей в строке :)
 
A

allexeym

эт начало
$dbh = DBI->connect ("dbi:mysql:database=$database_name;host=$host;port=$port", $user, $pass, {RaiseError=>0, PrintError=>1, AutoCommit=>1} );

if(!$dbh){
die "Error 0"
}

#======================= Make catalog (rating) (catalog.html) ===================
$sql_string = 'select Shop_ID,Shop_Name,Shop_SubDir,Div_ID,Aprove_Time from shop where Publish_St order by Aprove_Time desc';
$sth = $dbh->prepare ( $sql_string );
$sth->execute();

if($sth==0){
$error_message = $dbh->errmsg;
print STDERR "$error_message\n";
die "Error in select";
}

а после идёт то на чем я застопорился

я так понимаю , что вот эта строка @last_shop_id_arr=$sth->fetchcol(0) выбирает 0-й столбец

и как мне выбрать 0-й через DBI?

Код:
while (@row = $sth->fetchrow_array) {
#И здесь обрабатываешь строчку из бд. Если так хочешь, можешь распихивать ее по своим массивам.
}
я не понял)
с перлом знаком буквально 3 дня)
как мне написать эту замену :angry:
 
A

allexeym

ну вот так да, работает

while (@row = $sth->fetchrow_array){
print $row[0];
};
т.е. выводить то что надо
но без пробелов

вот такой вот кучей
2393241524412440244724452463247324722469246824652395240

а надо шоб было так

239 324 152 4412 44024 472 44524 6324 732 472 2469 2468 246 523 95 240

или оно пофиг?
или зависит от того что должен делать скриптик?
 
V

Vovochka

Вывод зависит от тебя :) Добавишь пробелы, будут пробелы :)
Через DBI получить весь первый столбец:
Код:
@first_col;
while (@row = $sth->fetchrow_array) {
push @first_col, $row[0];
}
Так ты получишь масив, состоящий из всех первых элементов.

используя вывод: print "$row[0] "; ты получишь пробелы :D
используя вывод: print "$row[0]\n"; ты получишь вывод с новой строки :)

ВСЕ! Зависит от того, что должен делать скрипт. Точнее, пожалуйста.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!