138 lines
3.9 KiB
PHP
138 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace Doctrine\DBAL\Driver\PDO;
|
|
|
|
use Doctrine\DBAL\Driver\Exception\UnknownParameterType;
|
|
use Doctrine\DBAL\Driver\Result as ResultInterface;
|
|
use Doctrine\DBAL\Driver\Statement as StatementInterface;
|
|
use Doctrine\DBAL\ParameterType;
|
|
use Doctrine\Deprecations\Deprecation;
|
|
use PDOException;
|
|
use PDOStatement;
|
|
|
|
use function array_slice;
|
|
use function func_get_args;
|
|
use function func_num_args;
|
|
|
|
final class Statement implements StatementInterface
|
|
{
|
|
private PDOStatement $stmt;
|
|
|
|
/** @internal The statement can be only instantiated by its driver connection. */
|
|
public function __construct(PDOStatement $stmt)
|
|
{
|
|
$this->stmt = $stmt;
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*
|
|
* @throws UnknownParameterType
|
|
*
|
|
* @psalm-assert ParameterType::* $type
|
|
*/
|
|
public function bindValue($param, $value, $type = ParameterType::STRING)
|
|
{
|
|
if (func_num_args() < 3) {
|
|
Deprecation::trigger(
|
|
'doctrine/dbal',
|
|
'https://github.com/doctrine/dbal/pull/5558',
|
|
'Not passing $type to Statement::bindValue() is deprecated.'
|
|
. ' Pass the type corresponding to the parameter being bound.',
|
|
);
|
|
}
|
|
|
|
$pdoType = ParameterTypeMap::convertParamType($type);
|
|
|
|
try {
|
|
return $this->stmt->bindValue($param, $value, $pdoType);
|
|
} catch (PDOException $exception) {
|
|
throw Exception::new($exception);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*
|
|
* @deprecated Use {@see bindValue()} instead.
|
|
*
|
|
* @param mixed $param
|
|
* @param mixed $variable
|
|
* @param int $type
|
|
* @param int|null $length
|
|
* @param mixed $driverOptions The usage of the argument is deprecated.
|
|
*
|
|
* @throws UnknownParameterType
|
|
*
|
|
* @psalm-assert ParameterType::* $type
|
|
*/
|
|
public function bindParam(
|
|
$param,
|
|
&$variable,
|
|
$type = ParameterType::STRING,
|
|
$length = null,
|
|
$driverOptions = null
|
|
): bool {
|
|
Deprecation::trigger(
|
|
'doctrine/dbal',
|
|
'https://github.com/doctrine/dbal/pull/5563',
|
|
'%s is deprecated. Use bindValue() instead.',
|
|
__METHOD__,
|
|
);
|
|
|
|
if (func_num_args() < 3) {
|
|
Deprecation::trigger(
|
|
'doctrine/dbal',
|
|
'https://github.com/doctrine/dbal/pull/5558',
|
|
'Not passing $type to Statement::bindParam() is deprecated.'
|
|
. ' Pass the type corresponding to the parameter being bound.',
|
|
);
|
|
}
|
|
|
|
if (func_num_args() > 4) {
|
|
Deprecation::triggerIfCalledFromOutside(
|
|
'doctrine/dbal',
|
|
'https://github.com/doctrine/dbal/issues/4533',
|
|
'The $driverOptions argument of Statement::bindParam() is deprecated.',
|
|
);
|
|
}
|
|
|
|
$pdoType = ParameterTypeMap::convertParamType($type);
|
|
|
|
try {
|
|
return $this->stmt->bindParam(
|
|
$param,
|
|
$variable,
|
|
$pdoType,
|
|
$length ?? 0,
|
|
...array_slice(func_get_args(), 4),
|
|
);
|
|
} catch (PDOException $exception) {
|
|
throw Exception::new($exception);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public function execute($params = null): ResultInterface
|
|
{
|
|
if ($params !== null) {
|
|
Deprecation::trigger(
|
|
'doctrine/dbal',
|
|
'https://github.com/doctrine/dbal/pull/5556',
|
|
'Passing $params to Statement::execute() is deprecated. Bind parameters using'
|
|
. ' Statement::bindParam() or Statement::bindValue() instead.',
|
|
);
|
|
}
|
|
|
|
try {
|
|
$this->stmt->execute($params);
|
|
} catch (PDOException $exception) {
|
|
throw Exception::new($exception);
|
|
}
|
|
|
|
return new Result($this->stmt);
|
|
}
|
|
}
|