Codeigniter PDO模拟准备

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)

RaG*_*940 5

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)