在Codeigniters $ this-> db-> get()调用之前注入SQL

时间:2013-10-24 11:59:32

标签: sql-server codeigniter

这是我尝试做的事情。我有一个具有以下结构的表,它应该保存任何其他表中其他数据的翻译值

Translations
| Language id | translation | record_id | column_name | table_name |
====================================================================
| 1           | Hello       | 1         | test_column | test_table | 
| 2           | Aloha       | 1         | test_column | test_table |
| 1           | Test input  | 2         | test_column | test_table |

在我在我的视图中使用的代码中,我有一个查找此表的函数,并以用户的语言返回字符串。如果字符串未以其语言翻译,则该函数返回应用程序默认值中的字符串(假设使用ID = 1

它工作正常,但我必须通过大约600个视图文件来应用这个......我想知道是否有可能在原始记录的$this->db->get()之前在我的CodeIgniter模型中注入一些SQL ,用原始列替换原始列。

这样的事情:

$this->db->select('column_name, col_2, col_3');
// Injected SQL pseudocode:
// If RECORD EXISTS in table Translations where Language_id = 2 and record_id = 2 AND column_name = test_column AND table_name = test_table
// BEGIN
//     SELECT translations.translation as column_name
//     WHERE translations.table_name = test_table AND column_name = test_column AND record_id = 2
// END
// ELSE
// BEGIN
//     SELECT translations.translation as column_name
//     WHERE translations.table_name = test_table AND column_name = test_column AND record_id = 1
// END

$this->db->get('test_table');

这可能以某种方式完成吗?

1 个答案:

答案 0 :(得分:0)

你所要求的并没有多大意义。您只需先进行不同的查询,然后根据结果更改第二个查询,即可“注入”。

另一种选择(可能更好)是在存储过程中完成所有这些操作,但它仍然基本相同,只需要较少的连接和加快处理速度