zend_db_expr zend query left framework php zend-framework2 quote

php - left - zend query



¿Cuál es el equivalente ZF2 del método quoteInto() de ZF1? (3)

todavía está allí (un poco), echa un vistazo a zf2 / library / Zend / Db / Adapter / Platform /your DB adapter . Encontré aproximadamente 6 métodos de quote() diferentes quote() disponibles en la variante de MySql . Sin embargo, creo que quoteValue() ha reemplazado la quoteInto() predeterminadaInto quoteInto() que todos estamos acostumbrados.

[ EDITAR ]
Usar el objeto de la plataforma proporcionará alguna dirección, pero creo que la mayoría de las veces las nuevas clases de SQL usarán la API de la plataforma para hacer las citas por nosotros. Todavía estoy aprendiendo esto yo mismo, así que no estoy seguro de nada.

En Zend Framework 1 hay un método quoteinto para el adaptador de base de datos que se puede usar para citar sentencias SQL.

Me gustaría saber su equivalente en Zend Framework 2?


Desafortunadamente, el método quoteInto() se eliminó con la introducción del nuevo Zend/Db en ZF 2.0. Y no hay un equivalente que tenga exactamente el mismo comportamiento.

En ZF2 existe el método quoteValue() . Este método toma un valor como parámetro y luego cita el valor para que pueda ponerlo en una consulta SQL como un valor.

Sin embargo, puede usar quoteValue() para replicar el comportamiento del método ZF1 quoteInto() . Simplemente puede tomar el código del método quoteInto() de ZF1 y aplicar el método quoteValue() desde el objeto de la plataforma en ZF2 a él:

// modified quoteInto() function for ZF2 function quoteInto($text, $value, $platform, $count = null) { if ($count === null) { return str_replace(''?'', $platform->quoteValue($value), $text); } else { while ($count > 0) { if (strpos($text, ''?'') !== false) { $text = substr_replace($text, $platform->quoteValue($value), strpos($text, ''?''), 1); } --$count; } return $text; } }

Hay algunas diferencias ZF1 tiene un parámetro $type , pero debido a la forma en que ZF2 funciona con estas cosas, el parámetro tipo no tiene mucho sentido. Y hay un parámetro $platform , porque este método tiene una dependencia en la plataforma para el método quoteValue() .


Citar una declaración SQL es la forma antigua y potencialmente insegura de hacerlo. Debe utilizar declaraciones preparadas que tienen una protección mucho mejor contra la inyección de SQL. Yo usaría uno de los controladores PDO enumerados aquí (dependiendo de su base de datos) y seguiría algunos de los ejemplos a continuación que usan consultas preparadas.