80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Illuminate\Database;
 | 
						|
 | 
						|
use Illuminate\Support\Str;
 | 
						|
use PDOException;
 | 
						|
use Throwable;
 | 
						|
 | 
						|
class QueryException extends PDOException
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * The SQL for the query.
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $sql;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The bindings for the query.
 | 
						|
     *
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    protected $bindings;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a new query exception instance.
 | 
						|
     *
 | 
						|
     * @param  string  $sql
 | 
						|
     * @param  array  $bindings
 | 
						|
     * @param  \Throwable  $previous
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function __construct($sql, array $bindings, Throwable $previous)
 | 
						|
    {
 | 
						|
        parent::__construct('', 0, $previous);
 | 
						|
 | 
						|
        $this->sql = $sql;
 | 
						|
        $this->bindings = $bindings;
 | 
						|
        $this->code = $previous->getCode();
 | 
						|
        $this->message = $this->formatMessage($sql, $bindings, $previous);
 | 
						|
 | 
						|
        if ($previous instanceof PDOException) {
 | 
						|
            $this->errorInfo = $previous->errorInfo;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Format the SQL error message.
 | 
						|
     *
 | 
						|
     * @param  string  $sql
 | 
						|
     * @param  array  $bindings
 | 
						|
     * @param  \Throwable  $previous
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    protected function formatMessage($sql, $bindings, Throwable $previous)
 | 
						|
    {
 | 
						|
        return $previous->getMessage().' (SQL: '.Str::replaceArray('?', $bindings, $sql).')';
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the SQL for the query.
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function getSql()
 | 
						|
    {
 | 
						|
        return $this->sql;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get the bindings for the query.
 | 
						|
     *
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    public function getBindings()
 | 
						|
    {
 | 
						|
        return $this->bindings;
 | 
						|
    }
 | 
						|
}
 |