php - 即使在 codeigniter 中 db 的主机名错误,也继续执行

标签 php mysql database codeigniter

我的网页分为三个部分,顶部、中部和底部。所有三个部分都连接到不同的数据库。但是考虑到如果其中一个数据库主机名被弄乱那么整个页面就会中断并抛出错误的场景。是否有可能如果某个数据库发生某些事情,那么该部分不应出现,但该部分的其余部分显示运行顺利?

我的数据库.php

$db['default'] = array(
'dsn'   => '',
'hostname' => '1.1.1.1',
'username' => 'username',
'password' => 'password',
'database' => 'DB',
'dbdriver' => 'mysqli',
'dbprefix' => 'pre_',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);

除了主机名和用户名外,所有三个数据库都具有相同的设置。第一个主机名是 1.1.1.1。第二个主机名是 1.1.1.2,第三个是 1.1.1.3,因为发生了一些事情,它无法连接到 1.1.1.2 并给我错误消息。

最佳答案

您可以创建 3 组数据库,例如:

$db['default'] = array(
'hostname' => '1.1.1.1',
'username' => 'username',
'password' => 'password',
'database' => 'DB',
'dbdriver' => 'mysqli',
'dbprefix' => 'pre_',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);

$db['db2'] = array(
'hostname' => '1.1.1.2',
'username' => 'username2',
'password' => 'password',
'database' => 'DB',
'dbdriver' => 'mysqli',
'dbprefix' => 'pre_',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);

$db['db3'] = array(
'hostname' => '1.1.1.3',
'username' => 'username3',
'password' => 'password',
'database' => 'DB',
'dbdriver' => 'mysqli',
'dbprefix' => 'pre_',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);

并连接每个数据库:

$DB1 = $this->load->database('default', TRUE);
$DB2 = $this->load->database('db2', TRUE);
$DB3 = $this->load->database('db3', TRUE);

因此您可以根据需要使用每一个:

$DB1->query();
$DB1->result();

https://codeigniter.com/user_guide/database/connecting.html#connecting-to-multiple-databases

关于php - 即使在 codeigniter 中 db 的主机名错误,也继续执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55949935/

相关文章:

php - 不断尝试将随机唯一值插入表中

PHP 检测 shell_exec() 命令是否失败

php - UTF-8贯穿始终

c# - CosmosDB System.ArgumentNullException : 'Value cannot be null. (Parameter ' authKeyOrResourceToken')'

用于固定长度记录文件的 Java (ME) 库

php - 由于某种原因,存储在 MYSQL 上的文件名是错误的

php - 更新 Magento 安装脚本中的属性

mysql 按最大然后第二大排序

mysql - 我需要查询来选择重复记录并删除该记录仅保留原始记录

mysql - 如何通过控制台禁用对数据库导入的外键检查?