SqlServerConnection.php
TLDR
The SqlServerConnection.php
file implements the Connection
interface from the Doctrine\DBAL\Driver
namespace. It provides methods for preparing SQL statements, executing queries, executing SQL statements, retrieving the last insert ID, managing transactions, wrapping quotes around input, getting the server version, and accessing the native PDO connection.
Methods
prepare
The prepare
method prepares a new SQL statement by calling the prepare
method on the underlying connection and returning a new Doctrine\DBAL\Driver\Statement
instance.
query
The query
method executes a new query against the connection by calling the query
method on the underlying connection and returning a Doctrine\DBAL\Driver\Result
instance.
exec
The exec
method executes an SQL statement by calling the exec
method on the underlying connection and returning the number of affected rows.
lastInsertId
The lastInsertId
method retrieves the last insert ID. If a name is provided, it executes a prepared statement to retrieve the last insert ID from the database's sequences table. If no name is provided, it calls the lastInsertId
method on the underlying connection.
beginTransaction
The beginTransaction
method begins a new database transaction by calling the beginTransaction
method on the underlying connection.
commit
The commit
method commits a database transaction by calling the commit
method on the underlying connection.
rollBack
The rollBack
method rolls back a database transaction by calling the rollBack
method on the underlying connection.
quote
The quote
method wraps quotes around the given input by calling the quote
method on the underlying connection. It also fixes a driver version issue where values are terminated with a null byte.
getServerVersion
The getServerVersion
method gets the server version for the connection by calling the getServerVersion
method on the underlying connection.
getNativeConnection
The getNativeConnection
method returns the native PDO connection by calling the getWrappedConnection
method on the underlying connection.
<?php
namespace Illuminate\Database\PDO;
use Doctrine\DBAL\Driver\Connection as ConnectionContract;
use Doctrine\DBAL\Driver\PDO\SQLSrv\Statement;
use Doctrine\DBAL\Driver\Result;
use Doctrine\DBAL\Driver\Statement as StatementInterface;
use Doctrine\DBAL\ParameterType;
use PDO;
class SqlServerConnection implements ConnectionContract
{
/**
* The underlying connection instance.
*
* @var \Illuminate\Database\PDO\Connection
*/
protected $connection;
/**
* Create a new SQL Server connection instance.
*
* @param \Illuminate\Database\PDO\Connection $connection
* @return void
*/
public function __construct(Connection $connection)
{
$this->connection = $connection;
}
/**
* Prepare a new SQL statement.
*
* @param string $sql
* @return \Doctrine\DBAL\Driver\Statement
*/
public function prepare(string $sql): StatementInterface
{
return new Statement(
$this->connection->prepare($sql)
);
}
/**
* Execute a new query against the connection.
*
* @param string $sql
* @return \Doctrine\DBAL\Driver\Result
*/
public function query(string $sql): Result
{
return $this->connection->query($sql);
}
/**
* Execute an SQL statement.
*
* @param string $statement
* @return int
*/
public function exec(string $statement): int
{
return $this->connection->exec($statement);
}
/**
* Get the last insert ID.
*
* @param string|null $name
* @return string|int
*/
public function lastInsertId($name = null): string|int
{
if ($name === null) {
return $this->connection->lastInsertId($name);
}
return $this->prepare('SELECT CONVERT(VARCHAR(MAX), current_value) FROM sys.sequences WHERE name = ?')
->execute([$name])
->fetchOne();
}
/**
* Begin a new database transaction.
*
* @return void
*/
public function beginTransaction(): void
{
$this->connection->beginTransaction();
}
/**
* Commit a database transaction.
*
* @return void
*/
public function commit(): void
{
$this->connection->commit();
}
/**
* Rollback a database transaction.
*
* @return void
*/
public function rollBack(): void
{
$this->connection->rollBack();
}
/**
* Wrap quotes around the given input.
*
* @param string $value
* @param int $type
* @return string
*/
public function quote($value, $type = ParameterType::STRING): string
{
$val = $this->connection->quote($value, $type);
// Fix for a driver version terminating all values with null byte...
if (\is_string($val) && str_contains($val, "\0")) {
$val = \substr($val, 0, -1);
}
return $val;
}
/**
* Get the server version for the connection.
*
* @return string
*/
public function getServerVersion(): string
{
return $this->connection->getServerVersion();
}
/**
* Get the native PDO connection.
*
* @return \PDO
*/
public function getNativeConnection(): PDO
{
return $this->connection->getWrappedConnection();
}
}