CodeIgniter MySQL одновременно обновляет несколько таблиц db-›update() db-›where()

Я использую CodeIgniter и хочу сделать запрос MySQL, который обновляет несколько таблиц следующим образом:

UPDATE TABLE1, TABLE2
SET 
    TABLE1.NAME='Teddy', 
    TABLE2.CLIENT_NOTES = 'Teddy is a good guy' 
WHERE VISITOR.ID = 1

Как я могу сделать это, используя db->update() CodeIgniter и db->where()? Это возможно?

Спасибо, что посмотрели это. С уважением.


person Community    schedule 06.02.2013    source источник
comment
Я думаю, что это невозможно, нам нужно обновлять по одному.   -  person AjayR    schedule 06.02.2013
comment
почему бы не использовать собственный sql, более чистый и читаемый при выполнении сложных запросов   -  person tomexsans    schedule 06.02.2013
comment
Вы имеете в виду db-›query('код mysql здесь')? Я пытаюсь убедиться, что поддерживаю безопасность и другие встроенные функции codeigniter. Могу ли я победить их или цель использования codeigniter с помощью собственного sql?   -  person    schedule 06.02.2013


Ответы (2)


Вам нужно будет использовать $this->db->query() для чего-то более сложного, как это

Нет никакой разницы в том, что касается экранирования, безопасности и т. д. Active Record просто форматирует разные строки в одну строку запроса.

person jmadsen    schedule 06.02.2013
comment
Уверены ли мы в обходе системы безопасности? У меня сложилось впечатление, что да, при использовании db-›query() – после прочтения этой страницы››› ellislab.com/codeigniter/user-guide/database/queries.html Экранирование запросов Это очень хорошая практика безопасности, чтобы экранировать ваши данные перед их отправкой в ваша база данных. В CodeIgniter есть три метода, которые помогут вам сделать это: $this-›db-›escape() - person ; 06.02.2013
comment
Да, все в порядке. Что вам нужно обязательно сделать, так это использовать привязки запросов, о которых вы можете прочитать внизу этой страницы. Это автоматически экранирует и (помогает) предотвратить атаки путем внедрения $this-›db-›query($sql, array(3, 'live', 'Rick')); Вторым преимуществом использования привязок является то, что значения автоматически экранируются, создавая более безопасные запросы. Вам не нужно помнить об экранировании данных вручную; двигатель делает это автоматически за вас. - person jmadsen; 06.02.2013

Прежде всего, вам нужно дать псевдоним вашим таблицам, например, table1 as t1 и table2 as t2 Итак, ваш окончательный запрос будет выглядеть так:

$this->db->set('t1.row','New value');
$this->db->set('t2.row','New value');
$this->db->where('t1.row','Your Condition');
$this->db->where('t2.row','Your Condition');
$this->db->update('table1 as t1, table2 as t2');
person Jitesh Tukadiya    schedule 06.02.2013
comment
Пока я использую этот код: $this-›db-›set('reg.email_hash_code', ''); $this-›db-›set('log.password', 'password'); $this-›db-›where('reg.email_hash_code','hashcode'); $this-›db-›where('log.emailid', '[email protected]'); $this-›db-›where('log.user_id = reg.user_id'); $this-›db-›update('jc_login как лог, jc_registration как reg'); Я получил следующую ошибку: Таблица 'databasename .jc_login as log, jc_registration' не существует - person Renjithapr22; 13.10.2017