%PDF-1.4
Directory : /var/www/vhosts/lautnusantara.com/httpdocs/mis/system/Database/OCI8/ |
<?php /** * This file is part of CodeIgniter 4 framework. * * (c) CodeIgniter Foundation <admin@codeigniter.com> * * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ namespace CodeIgniter\Database\OCI8; use BadMethodCallException; use CodeIgniter\Database\BasePreparedQuery; use CodeIgniter\Database\PreparedQueryInterface; /** * Prepared query for OCI8 */ class PreparedQuery extends BasePreparedQuery implements PreparedQueryInterface { /** * A reference to the db connection to use. * * @var Connection */ protected $db; /** * Latest inserted table name. */ private ?string $lastInsertTableName = null; /** * Prepares the query against the database, and saves the connection * info necessary to execute the query later. * * NOTE: This version is based on SQL code. Child classes should * override this method. * * @param array $options Passed to the connection's prepare statement. * Unused in the OCI8 driver. * * @return mixed */ public function _prepare(string $sql, array $options = []) { if (! $this->statement = oci_parse($this->db->connID, $this->parameterize($sql))) { $error = oci_error($this->db->connID); $this->errorCode = $error['code'] ?? 0; $this->errorString = $error['message'] ?? ''; } $this->lastInsertTableName = $this->db->parseInsertTableName($sql); return $this; } /** * Takes a new set of data and runs it against the currently * prepared query. Upon success, will return a Results object. */ public function _execute(array $data): bool { if (null === $this->statement) { throw new BadMethodCallException('You must call prepare before trying to execute a prepared statement.'); } $lastKey = 0; foreach (array_keys($data) as $key) { oci_bind_by_name($this->statement, ':' . $key, $data[$key]); $lastKey = $key; } $result = oci_execute($this->statement, $this->db->commitMode); if ($result && $this->lastInsertTableName !== '') { $this->db->lastInsertedTableName = $this->lastInsertTableName; } return $result; } /** * Returns the result object for the prepared query. * * @return mixed */ public function _getResult() { return $this->statement; } /** * Replaces the ? placeholders with :0, :1, etc parameters for use * within the prepared query. */ public function parameterize(string $sql): string { // Track our current value $count = 0; return preg_replace_callback('/\?/', static function ($matches) use (&$count) { return ':' . ($count++); }, $sql); } }