wherein wheredate query inner php mysql pdo laravel laravel-4

php - wheredate - Escape de consultas SQL sin formato en Laravel 4



wheredate laravel (6)

¿Cómo puede uno escaparse de los parámetros pasados ​​a una consulta sin procesar en Laravel 4? Esperaba algo como DB::escape() (que suena una campana de Laravel 3) y también intento DB::quote() (que pensé que podría estar disponible a través del objeto PDO )

$query = DB::select("SELECT * FROM users WHERE users.id = " . DB::escape($userId));

No podemos usar el método de selección con marcadores de posición ya que lo anterior es solo un ejemplo simplificado de lo que estamos tratando de lograr. Tenemos una gran consulta personalizada con algunas consultas de selección anidadas que no se pueden adaptar al generador de consultas.

¿Cuál es el mejor enfoque para escapar de algo antes de insertarlo en Laravel 4?

EDITAR:

Acabo de descubrir que puede acceder al objeto PDO y usar la función de presupuesto de esta manera. ¿Sigue siendo este el mejor enfoque o existe una forma más fácil de acceder a esta función?

DB::connection()->getPdo()->quote("string to quote");


Aquí hay un ejemplo más completo, que muestra cómo escapar tanto de valores como de columnas y extender el generador de consultas de Laravel:

<?php namespace App/Providers; use Illuminate/Database/Query/Builder; use Illuminate/Support/ServiceProvider; class DatabaseQueryBuilderMacroProvider extends ServiceProvider { public function register() { Builder::macro(''whereInSet'', function($columnName, $value) { /** @var /Illuminate/Database/Query/Grammars/Grammar $grammar */ $grammar = $this->getGrammar(); return $this->whereRaw(''FIND_IN_SET(?,'' . $grammar->wrap($columnName) . '')'', [$value]); }); } }


Encontré esta pregunta cuando busqué escapes genéricos de sql en Laravel. Lo que realmente necesitaba era escapar de nombre de tabla / columna. Entonces, para referencia futura:

/** * Quotes database identifier, e.g. table name or column name. * For instance: * tablename -> `tablename` * @param string $field * @return string */ function db_quote_identifier($field) { static $grammar = false; if (!$grammar) { $grammar = DB::table(''x'')->getGrammar(); // The table name doesn''t matter. } return $grammar->wrap($field); }


Estoy usando esto en mi helpers.php en Laravel 5:

if ( ! function_exists(''esc_sql'')) { function esc_sql($string) { return app(''db'')->getPdo()->quote($string); } }

Entonces puedo usar la función esc_sql donde necesito calcular el escape para las consultas SQL sin formato.


Puede citar sus cadenas de esta manera, a través de la fachada DB .

DB::connection()->getPdo()->quote("string to quote");

Puse esta respuesta en mi pregunta cuando la descubrí, sin embargo, ahora la he presentado como una respuesta real para que otros la encuentren más fácilmente.


También puede intentar esto, ( Leer documentación )

$results = DB::select(''SELECT * FROM users WHERE users.id = ?'', array($userId));


$value = Input::get("userID"); $results = DB::select( DB::raw("SELECT * FROM users WHERE users.id = :value"), array( ''value'' => $value, ));

Más detalles HERE