gpt4 book ai didi

php - 使用 CodeIgniter form_validation 规则 is_unique 加载多个数据库

转载 作者:行者123 更新时间:2023-11-29 12:29:07 26 4
gpt4 key购买 nike

我已在 DB_driver.php 中对 Codeigniter 进行了修复,以便通过将 $this->db_select(); 添加到 function simple_query($sql )

然后我有一个 MY_Controller.php,它加载我的数据库和扩展它的每个 Controller :

class MY_Controller extends CI_Controller {
public function __construct() {
$this->db1 = $this->load->database('db1',TRUE);
$this->db2 = $this->load->database('db2',TRUE);
}
}

我的应用程序是现有数据库的后端管理面板。我宁愿不使用附加表来操作现有数据库,而是将我的管理面板所需的任何表存储在另一个数据库中(db1 是我的面板,db2 是现有数据库)。我在 /config/database.php 中的 $active_group 设置为 db1。

此格式的表单验证:

$userRules = "trim|required|min_length[4]|max_length[25]|xss_clean|is_unique[users.username]";
$this->form_validation->set_rules('username', 'Username', $userRules);

工作得很好,因为在这种情况下我希望查询 db1 和 users 表(我的管理面板数据库)。

但是,如果我想在 db2 上执行同样的操作,如下所示:

$useridRules = "trim|required|min_length[4]|max_length[25]|xss_clean|is_unique[login.userid]";
$this->form_validation->set_rules('userid', 'Username', $useridRules);

不起作用,因为它仍在尝试查询 db1。返回错误:

Error Number: 1146
Table 'db1.login' doesn't exist
SELECT * FROM (`login`) WHERE `user_id` = 'asdfjkl' LIMIT 1
Filename: libraries/Form_validation.php
Line Number: 954

db1.login 肯定不存在,因为我需要查询 db2 的登录表,所以错误是预料之中的,但不是想要的。

我很好奇是否有人找到了一种方法来使用 is_unique 验证规则来查询他们的第二个数据库或第一个数据库,具体取决于手头的实例,或者我是否需要使用回调编写一个函数(或者如果您认为最好将我的表放入现有的 db2 中并在它们前面加上 ci_table 前缀?

最佳答案

我认为您可以使用回调函数来调用执行检查的特定函数:

所以改变这个:

$userRules = "trim|required|min_length[4]|max_length[25]|xss_clean|is_unique[users.username]";

对此:

$userRules = "trim|required|min_length[4]|max_length[25]|xss_clean|callback_is_unique";

您需要有一个函数来处理它:

function is_unique($username){ // $username recieves the parameter automatically
//Go on with your query as bellow
$this->db2->
}

关于php - 使用 CodeIgniter form_validation 规则 is_unique 加载多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27867528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com