Codeigniter PDO emulate prepare
codeigniter, mysql, pdo, php, prepared-statement
Solution
system/database/drivers/pdo around line 96 you can edit the error mode and you can add emulate prepares to false. Now most db servers can take advantage of this, I know mysql does. hopefully this helps any one else.
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);
}
Problem
I have been reading around and people say that when setting up your connection with your Database that you should add ``` $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); ``` Telling PDO to disable emulated prepared statements using real PDO statements. How do I set up this up in Codeigniter? I am using codeigniter 2.1.3 Edit 1: How I connect now : ``` $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; ``` and a query example is : ``` 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; } } ```