RaG*_*940 4 php mysql pdo codeigniter prepared-statement
我一直在阅读,人们说在设置与数据库的连接时应该添加
$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Run Code Online (Sandbox Code Playgroud)
告诉PDO使用真正的PDO语句禁用模拟的预准备语句.
如何在Codeigniter中设置它?
我正在使用codeigniter 2.1.3
编辑1:
我现在如何连接:
$active_group = 'default';
$active_record = FALSE;
$db['default']['hostname'] = 'mysql:host=localhost';
$db['default']['username'] = 'XXXXXXX';
$db['default']['password'] = 'XXXXXXXXXX';
$db['default']['database'] = 'XXXXXXX';
$db['default']['dbdriver'] = 'pdo';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = FALSE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
Run Code Online (Sandbox Code Playgroud)
一个查询示例是:
function validate_login()
{
$bcrypt = new Bcrypt(17);
$sql = "SELECT * FROM users WHERE username = :user";
$loginQ = $this->db->conn_id->prepare($sql);
$loginQ->bindParam(':user', $this->input->post('username'));
$loginQ->execute();
$row = $loginQ->fetch();
$hash = $row['password'];
$password = $this->input->post('password');
$verified = $bcrypt->verify($password, $hash);
if($bcrypt->verify($password, $hash))
{
return $loginQ;
}
}
Run Code Online (Sandbox Code Playgroud)
system/database/drivers/pdo在第96行你可以编辑错误模式,你可以添加模拟准备到false.现在大多数数据库服务器都可以利用这一点,我知道mysql确实如此.希望这有助于任何其他人.
function db_connect()
{
$this->options['PDO::ATTR_ERRMODE'] = PDO::ERRMODE_EXCEPTION;
$this->options['PDO::ATTR_EMULATE_PREPARES'] = FALSE;
return new PDO($this->hostname, $this->username, $this->password, $this->options);
}
Run Code Online (Sandbox Code Playgroud)