查看第111行和第116行
<?php
class Connection_model extends CI_Model {
private $validated;
private $sender_db;
private $sender_host;
private $sender_user;
private $sender_pw;
private $receiver_db;
private $receiver_host;
private $receiver_user;
private $receiver_pw;
public $err_sender;
public $err_receiver;
private function define_database($target) {
if (in_array('sender', $target)) {
$db['sender'] = array(
'dsn' => '',
'hostname' => $this->sender_host,
'username' => $this->sender_user,
'password' => $this->sender_pw,
'database' => $this->sender_db,
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'autoinit' => TRUE,
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
return $db['sender'];
}
elseif (in_array('receiver', $target)) {
$db['receiver'] = array(
'dsn' => '',
'hostname' => $this->receiver_host,
'username' => $this->receiver_user,
'password' => $this->receiver_pw,
'database' => $this->receiver_db,
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'autoinit' => TRUE,
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
return $db['receiver'];
}
}
// Validate the connection(s)
private function validate($target) {
/* @param: Can be 'sender' (string), 'receiver' (string) or 'sender' and 'receiver' (array) */
// Go through all parameters and define an array
if ($target == 'sender' || in_array('sender', $target)) {
$sessions = array('connection', 'sender_db', 'sender_host', 'sender_user', 'sender_pw');
}
elseif ($target == 'receiver' || in_array('receiver', $target)) {
$sessions = array('connection', 'receiver_db', 'receiver_host', 'receiver_user', 'receiver_pw');
}
else {
echo 'Error: illegal parameter. Please use sender or receiver instead.';
}
// Check if all keys from the array are saved in session
if (isset($sessions)) :
foreach ($sessions as $value) {
if (key_exists($value, $this->session->get_userdata())) {
$this->validated = true;
}
}
endif;
}
// Establish one or many connections
/* @param: Can be 'sender' (string), 'receiver' (string) or 'sender' and 'receiver' (array) */
public function establish($target) {
if ($target == 'receiver' || in_array('receiver', $target)) { $receiver = 1; }
elseif ($target == 'sender' || in_array('sender', $target)) { $sender = 1; }
if ($sender = 1 || $receiver == 1) {
$db_values = array();
$this->validate($target);
if ($this->validated) {
// Aight, let's go ahead and connect this baby
if ($sender == 1) {
array_push($db_values, 'sender');
$this->sender_db = $this->session->userdata('sender_db');
$this->sender_host = $this->session->userdata('sender_host');
$this->sender_user = $this->session->userdata('sender_user');
$this->sender_pw = $this->session->userdata('sender_pw');
if ($this->load->database($this->define_database($db_values))) {
$this->err_sender = 0;
return $this->load->database($this->define_database($db_values), TRUE);
}
else {
echo '<br>AHHHHHHHHHHHHHHHHH<br>';
$this->err_sender = 1;
$this->session->unset_userdata('connection');
}
}
elseif ($receiver == 1) {
array_push($db_values, 'receiver');
$this->receiver_db = $this->session->userdata('receiver_db');
$this->receiver_host = $this->session->userdata('receiver_host');
$this->receiver_user = $this->session->userdata('receiver_user');
$this->receiver_pw = $this->session->userdata('receiver_pw');
if ($this->load->database($this->define_database($db_values))) {
$this->err_receiver = 0;
return $this->load->database($this->define_database($db_values), TRUE);
}
else {
$this->err_receiver = 1;
$this->session->unset_userdata('connection');
}
}
else {
echo 'Error: illegal parameter. Please use sender or receiver instead.';
}
if ($this->err_receiver == 1 || $this->err_sender == 1) {
// redirect('home');
exit;
}
}
else {
echo 'Oops, there is an error! For some reason the property "validated" is not returning true (Connection_model.php)';
exit;
}
}
else {
echo 'Error: illegal parameter. Please use sender or receiver instead.';
}
}
}
我总是得到echo 'AHHHHHHHHHHHHHHHHH'
。这可能是因为if ($this->load->database($this->define_database($db_values)))
返回false
。但为什么它会返回false
?它应该只在数据库连接无法建立时返回false
。
我看到的第一个问题是,在您的方法establish()
中,if conditional中存在语法错误,因为您可能已经知道=
分配了变量的含义,而==
比较了两个变量。更改以下内容:
你有:
if ($sender = 1 || $receiver == 1) {
应该是:
if ($sender == 1 || $receiver == 1) {
我看到的第二个问题是,当你在会话中检查密钥时。根据您的评论,您正在遍历sessions数组,以检查ALL键是否已保存,如果设置了一个键,则将其设置为true,然后检查下一个键。但如果没有设置一个键怎么办?您没有将其设为false。这样修复:
if (isset($sessions)):
foreach ($sessions as $value) {
if (key_exists($value, $this->session->get_userdata())) {
$this->validated = true;
} else {
$this->validated = false;
break;
}
}
endif;
第三个问题是,当您检查数据库是否已加载时,if语句没有检查bool,因此总是给出相同的结果。要接收bool,您必须首先将数据库db_debug
更改为FALSE
,然后尝试initialiaze
数据库并检查以下结果:
private function define_database($target) {
if (in_array('sender', $target)) {
$db['sender'] = array(
'dsn' => '',
'hostname' => $this->sender_host,
'username' => $this->sender_user,
'password' => $this->sender_pw,
'database' => $this->sender_db,
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => FALSE, //SET THIS TO FALSE
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'autoinit' => TRUE,
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE,
);
return $db['sender'];
} //....your other code
}
现在处于establish()
:
$db_obj = $this->load->database($this->define_database($db_values));
if ($db_obj->initialize()) {
$this->err_sender = 0;
return $db_obj;
} else {
echo '<br>AHHHHHHHHHHHHHHHHH<br>';
$this->err_sender = 1;
$this->session->unset_userdata('connection');
}
更改此行
if ($sender = 1 || $receiver == 1) {
到这条线路
if ($sender == 1 || $receiver == 1) {