mysql в Perl

Компьютеры программирование MySQL perl

Здравствуйте. Помогите плиз решить проблему. Есть небольшой скриптик на perl который с учетом условий некоторых получает информацию с базы данных mysql, и те записи которые удовлетворяют условиям выборки обновляет в БД.

Сам скрипт выборки работает без ошибок, когда добавляю в этот скрипт еще и обновление выбранных записей выдает ошибку.


вот скрипт только выборки:

use DBI;
use CGI qw(param());
use English;
use FileHandle;


$dbh =DBI->connect ("DBI:mysql:mydatabase","username","databasepassword");

$sth = $dbh->prepare("
select id,Name,Bonus
from users
where
Bonus > 0
");

$sth->execute;

while( ($id, $Name, $Bonus)=$sth->fetchrow()) {

print " USER id: $id and Name: $Name and Bonus: $Bonus \n";

}
$sth->finish;
$dbh->disconnect;



А это скрипт который выдает ошибку после того как я добавил туда еще и обновление записей:

use DBI;
use CGI qw(param());
use English;
use FileHandle;

$dbh =DBI->connect ("DBI:mysql:mydatabase","username","databasepassword");

$sth = $dbh->prepare("
select id,Name,Bonus
from users
where
Bonus > 0
");

$sth->execute;

while( ($id, $Name, $Bonus)=$sth->fetchrow()) {

print " USER id: $id and Name: $Name and Bonus: $Bonus \n";

$sth = $dbh->prepare("
UPDATE users SET Bonus = 0
where
id = $id
");
$sth->execute;

}
$sth->finish;
$dbh->disconnect;


Ошибка такая: DBD::mysql::st fetchrow failed: fetch() without execute()

В результате запрос для первой записи которая обрабатывается первой выполняется успешно, а дальше цикл while прекращается с этой ошибкой.


Ответы:
Переменная $sth от селекта затирается новым запросом от апдейта.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.