The start of something beautiful
This commit is contained in:
+137
@@ -0,0 +1,137 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user