/** * * @param Dbi_Sql_Query $query * @return PDOStatement */ private function _execute(Dbi_Sql_Query $query) { self::$queryCount++; $expression = $query->expression(); $stmt = $this->_pdo->prepare($expression->statement(), array(PDO::CURSOR_SCROLL)); if (!$stmt) { throw new Exception($this->_pdo->errorInfo); } $parameters = $expression->parameters(); if (count($parameters)) { $index = 1; foreach ($parameters as $p) { if (!is_scalar($p)) { $p = json_encode($p); } $stmt->bindValue($index, $p); $index++; } } $stmt->execute(); if ($stmt->errorCode() != '00000') { $info = $stmt->errorInfo(); throw new Exception($info[2]); } return $stmt; }
/** * Execute a query. * @param Dbi_Sql_Query $query * @return mysqli_stmt */ private function _execute(Dbi_Sql_Query $query) { self::$queryCount++; $expression = $query->expression(); $stmt = $this->_connection->prepare($expression->statement()); if (!$stmt) { throw new Exception($this->_connection->error); } $parameters = $expression->parameters(); if (count($parameters)) { $types = ''; $refs = array(); foreach ($parameters as &$p) { if (!is_scalar($p)) { $p = json_encode($p); } $types .= "s"; $refs[] =& $p; } call_user_func_array(array($stmt, 'bind_param'), array_merge(array($types), $refs)) or die('hmm'); } $stmt->execute(); $stmt->store_result(); return $stmt; }
private function _bindParameters(Dbi_Sql_Query $sql) { $expression = $sql->expression(); $result = $expression->statement(); $offset = 0; $parameters = $expression->parameters(); while (count($parameters)) { $p = array_shift($parameters); $index = strpos($result, '?', $offset); $escaped = mysql_real_escape_string($p); $result = substr($result, 0, $index) . "'" . $escaped . "'" . substr($result, $index + 1); $offset = $index + strlen($escaped) + 2; } return $result; }