2014-02-16 7 views
1

У меня есть две таблицы, которые я хочу обновить, используя инструкцию SQL Update. Эти две таблицы содержат строку с именем «дуб» и «exp», которые являются значениями, которые я хочу обновить. Моя лучшая догадка заключается в следующем:Синтаксис инструкции SQL Update

'UPDATE `items_woods`, `skills_woodcutting` SET `oak`=`oak`+1, `exp`=`exp`+13 WHERE `id`=?' 

Однако ни одно из значений не сохраняется в базе данных. Заранее спасибо.

UPDATE:

if ($stmt = $mysqli->prepare(' 

     BEGIN TRANSACTION 

     UPDATE items_woods 
     SET items_woods.oak = ´1´ 
     FROM items_woods T1, skills_woodcutting T2 
     WHERE T1.id = T2.id 
     and T1.id = ´?´ 

     UPDATE skills_woodcutting 
     SET skills_woodcutting.exp = ´1´ 
     FROM items_woods T1, skills_woodcutting T2 
     WHERE T1.id = T2.id 
     and T1.id = ´?´ 

     COMMIT 


     ')) { 
+0

Является ли ваша фраза 'WHERE' на самом деле найденной для обновления? –

+0

Используйте соединение, если вы хотите ОБНОВИТЬ 2 таблицы – Mihai

+0

@MikeW да, я использую подготовленные операторы, а вопросик устанавливается равным 1. Я тестировал инструкцию обновления только с обновлением одного значения, и он работал. – user3287771

ответ

0

Как там две таблицы, необходимо обновить их с двумя отдельными заявлениями. Это можно сделать одной транзакцией и совершать обе транзакции только после того, как обе успешны.

Я не уверен, что datbase вы работаете, но общий подход будет:

commit (start the transaction) 
update items_woods set oak = oak+1 where id = ? 
update skills_woodcutting set exp=exp+13 where id = ? 
commit (complete the transaction) 
+0

Ваш SQL ошибочен, используйте BEGIN TRANSACTION, а не COMMIT для начала транзакции. Во всяком случае это дубликат equestion – TFD

+0

В ORACLE вы используете COMMIT или ROLLBACK, чтобы начать транзакцию. Как я упоминал в сообщении, исходный плакат не указывал базу данных. Благодарю. – ardochhigh

+0

Первый COMMIT просто опустошает уже запущенную (неявную или именованную) транзакцию. Затем новая транзакция запускается автоматически с помощью следующего оператора. COMMIT фактически не запускает транзакцию (ANSI или Oracle) – TFD

1

SQL Update, будет обновить только одну таблицу, в то время

Использование транзакции с двумя update statement

+0

Вы можете помочь мне с кодом выше? Я думаю, что сделал именно то, что было описано в другом потоке, но оно все еще не работает. Благодарю. – user3287771

+0

@ user3287771 Он что-нибудь сделал? Вы получили сообщение об ошибке? У вас есть два? меток, необходимо передать два параметра (то же значение) – TFD

+0

Он ничего не делал, но возвращал сообщение об ошибке, которое я создал сам, если инструкция не проходит. Два вопроса должны быть равны 1, поэтому я предполагаю, что это должно быть хорошо. – user3287771

Смежные вопросы