powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос insert или update - проблема с update!
3 сообщений из 3, страница 1 из 1
Запрос insert или update - проблема с update!
    #32690484
amigos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема с запросом.
Необходимо изменить значение поля количество - n в строке заказа, но при этом, надо проверить есть ли такая строка.
Если есть , то update значение n,
Если нет, то insert .
Запрос n заказа.
$statement = "SELECT n FROM orders WHERE id = '$id' and code = '$ncode'";
$sth = $dbh->prepare($statement)
or die "Не могу подготовить $statement: $dbh -> errstr\n";
$rv = $sth->execute;
ВОПРОС 1.
ЧТО ЛУЧШЕ с запроса использовать для проверки условия наличия этой строки или её отсутствия
ВОПРОС 2. ЧТО ОБЫЧНО большинство использует для проверки наличия строки?
if (?? - нет строки)
{
$statement = "insert into orders values ('$id','$ncode', '$orders[0]', '$orders[1]', '$nn ', '$orders[2]')"; # ---добавляем в таблицу orders
$sth = $dbh->prepare($statement)
or die "Не могу подготовить $statement: $dbh -> errstr\n";
$rv = $sth->execute;
}
$statement = "update FROM orders set n = '$nitog' WHERE id = '$id' and code = '$ncode')"; # ---обновляем таблицу orders на количество
$sth = $dbh->prepare($statement)
or die "Не могу подготовить $statement: $dbh -> errstr\n";
$rv = $sth->execute;

Я пробовал $rows = $sth->rows;#---узнаем последний индекс массива
если -1 insert
иначе update
Perl (DBI.pm API), Apache, XP и mysql
Спасибо за ответы зараннее.
...
Рейтинг: 0 / 0
Запрос insert или update - проблема с update!
    #32690614
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во первых после execute тоже необходимо проверять что все нормально отработалось. (не только после prepare.

2) у вас логика:
if нет строки {
insert
}
update (выполнятеся всегда)

я бы заменил ее на
if нет строки {
insert сразу с готовыми значениями
} else {
update (выполняется только если строка уже была в иаблице)
}

3) Посмотрите команду replace по документации, может и подойдет

4) проверку вы правильно делаете. Ну можно разве чот посоветовать обратить внимание на команду handler, она очень быстро отрабатывается, так что если есть индексы по id и code, можно и ее попробовать

5) если вам не нужно делать выборку данных (то есть если вы делаете insert или update), нет необходимости отдельно prepare и execute. Можно использовать

$dbh->do("insert тра-ля-ля") or die $DBI::errstr

6) и кстати когда делаете or die "сообщение об ошибке", пробелы между $dbh и -> плохая идея. Лучше уж тогда так
or die "Не могу подготовить $statement:". $dbh -> errstr ;

7) Я не знаю структуру вашей таблицы, поэтому просто напоминаю, - что надо пользоваться $dbh->quote() для текстовых полей перед вставкой.
Или использовать конструкцию, скажем такую

Вместо

Код: plaintext
1.
2.
3.
$statement = "insert into orders values ('$id','$ncode', '$orders[0]', '$orders[1]', '$nn ', '$orders[2]')"; 
$sth = $dbh->prepare($statement)
$sth->execute

Я бы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
$sth->prepare("insert into orders values (?,?,?,?, ?,?)");
$sth->bind_param( 1 ,$id,DBI::SQL_INTEGER);        #комментарий что это за параметр
$sth->bind_param( 2 ,$ncode,DBI::SQL_INTEGER);  #комментарий что это за параметр
$sth->bind_param( 3 ,$orders[ 0 ],DBI::SQL_CHAR);  #комментарий что это за параметр
$sth->bind_param( 4 ,$orders[ 1 ],DBI::SQL_CHAR);  #комментарий что это за параметр
$sth->bind_param( 5 ,$nn,DBI::SQL_INTEGER);       #комментарий что это за параметр
$sth->bind_param( 6 ,$orders[ 2 ],DBI::SQL_CHAR);  #комментарий что это за параметр
$sth->execute;
...
Рейтинг: 0 / 0
Запрос insert или update - проблема с update!
    #32690736
amigos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос insert или update - проблема с update!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]