![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/framework/DB/Statement/Pdo/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Framework\DB\Statement\Pdo; use Magento\Framework\DB\Statement\Parameter; /** * Mysql DB Statement * * @author Magento Core Team <[email protected]> */ class Mysql extends \Zend_Db_Statement_Pdo { /** * Executes statement with binding values to it. Allows transferring specific options to DB driver. * * @param array $params Array of values to bind to parameter placeholders. * @return bool * @throws \Zend_Db_Statement_Exception * @SuppressWarnings(PHPMD.UnusedLocalVariable) */ public function _executeWithBinding(array $params) { // Check whether we deal with named bind $isPositionalBind = true; foreach ($params as $k => $v) { if (!is_int($k)) { $isPositionalBind = false; break; } } /* @var $statement \PDOStatement */ $statement = $this->_stmt; $bindValues = []; // Separate array with values, as they are bound by reference foreach ($params as $name => $param) { $dataType = \PDO::PARAM_STR; $length = is_string($param) ? strlen($param) : 0; $driverOptions = null; if ($param instanceof Parameter) { if (!$param->getIsBlob()) { $dataType = $param->getDataType(); $length = $param->getLength(); $driverOptions = $param->getDriverOptions(); } $bindValues[$name] = $param->getValue(); } else { $bindValues[$name] = $param; } $paramName = $isPositionalBind ? $name + 1 : $name; $statement->bindParam($paramName, $bindValues[$name], $dataType, $length, $driverOptions); } return $this->tryExecute(function () use ($statement) { return $statement->execute(); }); } /** * Executes a prepared statement. * * @param array $params OPTIONAL Values to bind to parameter placeholders. * @return bool * @throws \Zend_Db_Statement_Exception * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.UnusedLocalVariable) */ public function _execute(array $params = null) { $specialExecute = false; if ($params) { foreach ($params as $param) { if ($param instanceof Parameter) { $specialExecute = true; break; } } } if ($specialExecute) { return $this->_executeWithBinding($params); } else { return $this->tryExecute(function () use ($params) { return !empty($params) ? $this->_stmt->execute($params) : $this->_stmt->execute(); }); } } /** * Executes query and avoid warnings. * * @param callable $callback * @return bool * @throws \Zend_Db_Statement_Exception */ private function tryExecute($callback) { $previousLevel = error_reporting(\E_ERROR); // disable warnings for PDO bugs #63812, #74401 try { return $callback(); } catch (\PDOException $e) { $message = sprintf('%s, query was: %s', $e->getMessage(), $this->_stmt->queryString); throw new \Zend_Db_Statement_Exception($message, (int)$e->getCode(), $e); } finally { error_reporting($previousLevel); } } }