Foros del Web » Programando para Internet » PHP »

mysqli->real_escape_string y prepared statements

Estas en el tema de mysqli->real_escape_string y prepared statements en el foro de PHP en Foros del Web. Hola, Estoy convertiendo mis paginas mysql a mysqli, estaba intentando hacer esto: $topay = $mysqli->real_escape_string($_POST['topay']); pero no funciona. Asi que me he puesto a leer ...
  #1 (permalink)  
Antiguo 24/01/2014, 02:16
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
mysqli->real_escape_string y prepared statements

Hola,
Estoy convertiendo mis paginas mysql a mysqli,
estaba intentando hacer esto:
$topay = $mysqli->real_escape_string($_POST['topay']);
pero no funciona.
Asi que me he puesto a leer y según he entendido eso no debe de hacerse asi
y que debería de usar prepared statements.
Para las páginas de la web no tendré más remedio que hacerlo.
¿Alquien tiene un enlace facil de entender donde se hace uno a partir de un formulario?
No tengo muy claro como declaro las variables.
Para las páginas de intranet que son la gran mayoría y que no tienen enlace en la web y usan password protected directories en el servidor,
es necesario alli prepared statements?
Hay alguna otra manera de escapar para algo de seguridad y para escapar caracteres?
Y tambien usaba mysql_real_escape_string para escapar caracteres en los nombre como la comilla simple.
Si no escapo la variable del formulario con mysql_real_escape_string como lo escapo para los caracteres que pueden insertar como en los nombres con comilla?

Y ya que estamos, se sigue usando htmlspecialchars al enviar a otra página o tampoco vale ya?

Gracias,
  #2 (permalink)  
Antiguo 24/01/2014, 02:54
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: mysqli->real_escape_string y prepared statements

Una variable es una variable, ¿a que no?

Las variables las vas a seguir leyendo igual, usar prepared statements no implica que tengas que leer las variables del formulario de otro modo, no te equivoques.

Ahora, sí, para todo tipo de consultas es necesario usar prepared statements.

¿Por qué?

Por seguridad, eso no se discute.

Cita:
¿Alquien tiene un enlace facil de entender donde se hace uno a partir de un formulario?
¿Lo dices de broma?

El mal hábito de no consultar el manual oficial, ¿cierto?

http://www.php.net/pdo.prepared-statements
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/01/2014, 03:05
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: mysqli->real_escape_string y prepared statements

Cita:
Iniciado por pateketrueke Ver Mensaje
Una variable es una variable, ¿a que no?

Las variables las vas a seguir leyendo igual, usar prepared statements no implica que tengas que leer las variables del formulario de otro modo, no te equivoques.

Ahora, sí, para todo tipo de consultas es necesario usar prepared statements.

¿Por qué?

Por seguridad, eso no se discute.



¿Lo dices de broma?

El mal hábito de no consultar el manual oficial, ¿cierto?

http://www.php.net/pdo.prepared-statements
Era para escapar los varibles del formulario,
antes se mataba dos moscas en un tiro, tengo que escapar las variables, los ingles escriben cosas como O'reilly etc. y no me entra en la base.

y no, no es mal habito,
estoy pidiendo un manual simple,
simplemento me cuesta entender php.net,
mi web es una web enorme con mil paginas con 10 años de antiguedad y tengo unas paginas muy complicadas de pagos online que estoy convertiendo y tengo la cabeza hecha un lio despues de añadirles sessiones y hacerles funcionar que me ha costado mucho tiempo, y no contaba con esto, no tengo tiempo para estar intentando entender.
  #4 (permalink)  
Antiguo 24/01/2014, 03:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: mysqli->real_escape_string y prepared statements

Los prepared statements sirven exactamente para escapar tus variables automáticamente.

El enlace al manual que te he colocado tiene toda la información que buscas, y además se lee en menos de 5 minutos, está perfectamente bien explicado y en español.

Si no tienes el tiempo para aprender menos para resolver tus problemas.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 24/01/2014, 03:22
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: mysqli->real_escape_string y prepared statements

Cita:
Iniciado por pateketrueke Ver Mensaje
Los prepared statements sirven exactamente para escapar tus variables automáticamente.

El enlace al manual que te he colocado tiene toda la información que buscas, y además se lee en menos de 5 minutos, está perfectamente bien explicado y en español.

Si no tienes el tiempo para aprender menos para resolver tus problemas.
Gracias, el enlace que me has dado es de pdo, y he cambiado a mysqli.
Elegí mysqli porque era lo más parecido a mysql.
Quiero hacer los cambios menos posibles, se trata de cientos de paginas, aunque de momento estoy tocando solo la pasarela, como he estado trabajando con ella y prefiero no volver a tocarlas.

El tiempo me aprieta, pero lo tengo que hacer, y prefería leer sencillo para dummies viejas como yo.
  #6 (permalink)  
Antiguo 24/01/2014, 05:33
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: mysqli->real_escape_string y prepared statements

Si quieres hacer consultas parametrizadas, da lo mismo con cuak lo hagas ya que con los dos se hace orientado a objetos, te recomiendo PDO ya que si migras tus datos a otro sistema de bd no tendras que volver a cambiar codigo
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #7 (permalink)  
Antiguo 24/01/2014, 06:09
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: mysqli->real_escape_string y prepared statements

Cita:
Iniciado por xSkArx Ver Mensaje
Si quieres hacer consultas parametrizadas, da lo mismo con cuak lo hagas ya que con los dos se hace orientado a objetos, te recomiendo PDO ya que si migras tus datos a otro sistema de bd no tendras que volver a cambiar codigo
Migrar no se va a migrar.
Lo que me preocupa es hacer menos cambos posibles,
no quiero reescribir unas cien páginas.
Con pdo hay que hacer más cambios si no me equivoco.
Mysqli me parecia lo más parecido (sin prepared statements).
Y ya he cambiado 7 paginas de la pasarela a mysqli, aunque se puede volver a cambiar.

Tengo echo esto y no inserta nada, he puesto echo delante de $query = $mysqli->prepare, no estoy segura si es asi para imprimir el query:
<?
$mysqli = @new mysqli('localhost', 'sssss', 'sssss', 'tabla');
$mysqli->set_charset("utf8");
if ($mysqli->connect_error)
{
die('There is a temporary problem with this page at this moment: ' . $mysqli->connect_error);
}
include 'conexionmysqli.php';
$emailtrue = 'test';
$orderdatetime= '2014-01-21';
$unpaid = 'notpaid';
$concepto = 'que';
$query = $mysqli->prepare ("insert into orders (emailtrue, orderdatetime, statement, concepto) values (?, ?, ?,?)");
/* Bind parameters
s - String, b - Boolean, i - Integer etc, d - DOUBLE and FLOAT*/
$query->bind_param("ssss", $emailtrue, $orderdatetime, $unpaid, $concepto);
$query->execute();
$query->close();

?>

Dudas que tengo, lo de poner s si es string, i si es integer etc, y encima cuando uno inserta unos 50 variables será un coñazo.
Me pregunto si la s de string y i de integer se refiere a que si la columna es integer o si lo que se inserta es integer, porque en algunos casos quiero poner s aunque puede ser numeros lo que se inserta.
Otra cosa, cuando quiero insertar cosas como NOW(), eso se añade al bind_param?

Gracias

Última edición por helenp; 24/01/2014 a las 07:09
  #8 (permalink)  
Antiguo 24/01/2014, 07:42
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: mysqli->real_escape_string y prepared statements

puf, ya funciona, no sé si es la mejor manera,
no sabía que habia que usar stmt.

$stmt = $mysqli->prepare ("insert into orders (emailtrue, orderdatetime, statement, concepto) values (?, ?, ?,?)");
/* Bind parameters
s - String, b - Boolean, i - Integer etc, d - DOUBLE and FLOAT*/
$stmt->bind_param("ssss", $emailtrue, $orderdatetime, $unpaid, $concepto);
$stmt->execute();
  #9 (permalink)  
Antiguo 24/01/2014, 07:52
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: mysqli->real_escape_string y prepared statements

Los dos ultimos codigos son iguales
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #10 (permalink)  
Antiguo 24/01/2014, 07:57
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: mysqli->real_escape_string y prepared statements

Cita:
Iniciado por xSkArx Ver Mensaje
Los dos ultimos codigos son iguales
No entiendo

Etiquetas: formulario, html, mysql, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:08.