Файл: vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php
Строк: 223
<?php
namespace IlluminateDatabase;
use Exception;
use IlluminateDatabaseQueryGrammarsMySqlGrammar as QueryGrammar;
use IlluminateDatabaseQueryProcessorsMySqlProcessor;
use IlluminateDatabaseSchemaGrammarsMySqlGrammar as SchemaGrammar;
use IlluminateDatabaseSchemaMySqlBuilder;
use IlluminateDatabaseSchemaMySqlSchemaState;
use IlluminateFilesystemFilesystem;
use IlluminateSupportStr;
use PDO;
class MySqlConnection extends Connection
{
/**
* The last inserted ID generated by the server.
*
* @var string|int|null
*/
protected $lastInsertId;
/**
* {@inheritdoc}
*/
public function getDriverTitle()
{
return $this->isMaria() ? 'MariaDB' : 'MySQL';
}
/**
* Run an insert statement against the database.
*
* @param string $query
* @param array $bindings
* @param string|null $sequence
* @return bool
*/
public function insert($query, $bindings = [], $sequence = null)
{
return $this->run($query, $bindings, function ($query, $bindings) use ($sequence) {
if ($this->pretending()) {
return true;
}
$statement = $this->getPdo()->prepare($query);
$this->bindValues($statement, $this->prepareBindings($bindings));
$this->recordsHaveBeenModified();
$result = $statement->execute();
$this->lastInsertId = $this->getPdo()->lastInsertId($sequence);
return $result;
});
}
/**
* Escape a binary value for safe SQL embedding.
*
* @param string $value
* @return string
*/
protected function escapeBinary($value)
{
$hex = bin2hex($value);
return "x'{$hex}'";
}
/**
* Determine if the given database exception was caused by a unique constraint violation.
*
* @param Exception $exception
* @return bool
*/
protected function isUniqueConstraintError(Exception $exception)
{
return (bool) preg_match('#Integrity constraint violation: 1062#i', $exception->getMessage());
}
/**
* Extract the index that caused a unique constraint violation.
*
* @param Exception $exception
* @return array{index: string|null, columns: list<string>}
*/
protected function parseUniqueConstraintViolation(Exception $exception): array
{
preg_match(
'#Duplicate entry '.*?' for key '(?:.*?.)?(.+?)'#i',
$exception->getMessage(),
$matches
);
return ['columns' => [], 'index' => $matches[1] ?? null];
}
/**
* Get the connection's last insert ID.
*
* @return string|int|null
*/
public function getLastInsertId()
{
return $this->lastInsertId;
}
/**
* Determine if the connected database is a MariaDB database.
*
* @return bool
*/
public function isMaria()
{
return str_contains($this->getPdo()->getAttribute(PDO::ATTR_SERVER_VERSION), 'MariaDB');
}
/**
* Get the server version for the connection.
*
* @return string
*/
public function getServerVersion(): string
{
return str_contains($version = parent::getServerVersion(), 'MariaDB')
? Str::between($version, '5.5.5-', '-MariaDB')
: $version;
}
/**
* Get the default query grammar instance.
*
* @return IlluminateDatabaseQueryGrammarsMySqlGrammar
*/
protected function getDefaultQueryGrammar()
{
return new QueryGrammar($this);
}
/**
* Get a schema builder instance for the connection.
*
* @return IlluminateDatabaseSchemaMySqlBuilder
*/
public function getSchemaBuilder()
{
if (is_null($this->schemaGrammar)) {
$this->useDefaultSchemaGrammar();
}
return new MySqlBuilder($this);
}
/**
* Get the default schema grammar instance.
*
* @return IlluminateDatabaseSchemaGrammarsMySqlGrammar
*/
protected function getDefaultSchemaGrammar()
{
return new SchemaGrammar($this);
}
/**
* Get the schema state for the connection.
*
* @param IlluminateFilesystemFilesystem|null $files
* @param callable|null $processFactory
* @return IlluminateDatabaseSchemaMySqlSchemaState
*/
public function getSchemaState(?Filesystem $files = null, ?callable $processFactory = null)
{
return new MySqlSchemaState($this, $files, $processFactory);
}
/**
* Get the default post processor instance.
*
* @return IlluminateDatabaseQueryProcessorsMySqlProcessor
*/
protected function getDefaultPostProcessor()
{
return new MySqlProcessor;
}
}