w3schools str special mysqli_real_escape_string mysql_real_escape_string mysql_escape_string injection escape characters php zend-framework zend-db mysql-real-escape-string

php - special - mysql_real_escape_string con Zend



php mysql_escape_string (4)

Puede usar la función quote() proporcionada por Zend_Db :

http://framework.zend.com/manual/en/zend.db.adapter.html#zend.db.adapter.quoting.quote

Estoy desarrollando una aplicación web usando zend framework. Para las declaraciones seleccionadas que he usado de la siguiente manera.

Ex:

public function getData($name) { $sql = "SELECT * from customer where Customer_Name = ''$name''"; return $this->objDB->getAdapter()->fetchAll ($sql); }

Esto funciona bien Pero si envío el nombre del cliente como: colvin''s place , la consulta falla. Y sé que es por la cita simple.

Anteriormente utilicé la función PHP de addslashes. Pero vi que no es una buena manera de hacer esto. Esta vez utilicé la función PHP mysql_real_escape_string .

El problema es que dice siguiente advertencia.

Warning</b>: mysql_real_escape_string() [<a href=''function.mysql-real-escape-string''>function.mysql-real-escape-string</a>]: Access denied for user ''ODBC''@''localhost'' (using password: NO)

Esto se debe a que la función mysql_real_escape_string necesita una conexión a la base de datos abierta por mysql_connect . Mi pregunta es cómo puedo usar esto con las clases * Zend_DB *. Necesito usar consultas de selección personalizadas siempre. Aprecie sus otras sugerencias si están disponibles.

Gracias


Tuve el mismo problema y esta solución funciona bien para mí. Espero que esto sea de ayuda. puedes hacer algo como esto:

$quote_removed_name = str_replace("''","''''",$name);

luego escribe tu consulta de esta manera:

$sql = "SELECT * from customer where Customer_Name = ''$quote_removed_name''";


También podría usar el enlace de parámetros, entonces el método se verá así:

public function getData($name) { $sql = "SELECT * from customer where Customer_Name = :name"; return $this->objDB->getAdapter()->fetchAll ($sql, [''name'' => $name]); }

Entonces tus datos serán escapados automáticamente


Tuve este problema, lo usé de esta manera y está funcionando correctamente:

Puedes usar quote() :

El método quote () acepta un solo argumento, un valor de cadena escalar. Devuelve el valor con caracteres especiales escapados de una manera apropiada para el RDBMS que está utilizando y rodeado por delimitadores de valores de cadena. El delimitador de valor de cadena SQL estándar es la comilla simple ('').

Pero quote devuelve una cadena con ''cadena'' (lo devuelve dentro de la cita), por ejemplo, obtengo una cadena del usuario de un cuadro de entrada de texto (o por URL en el método GET)

$string = $this->parameters[''string'']; // This is like $_POST or $_GET $string = $this->db->quote($string); $string = substr($string, 1, strlen($string)-2); //The above line will remove quotes from start and end of string, you can skip it

Ahora podemos usar esta $string , y es como lo que devuelve mysql_real_escape_string