|
|
|
Запрос insert или update - проблема с update!
|
|||
|---|---|---|---|
|
#18+
Проблема с запросом. Необходимо изменить значение поля количество - 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 Спасибо за ответы зараннее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2004, 22:45 |
|
||
|
Запрос insert или update - проблема с update!
|
|||
|---|---|---|---|
|
#18+
Во первых после 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. Я бы Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2004, 11:57 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=677&tid=1854820]: |
0ms |
get settings: |
5ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 337ms |

| 0 / 0 |
