Foros del Web » Programando para Internet » PHP »

Dos SQL en uno

Estas en el tema de Dos SQL en uno en el foro de PHP en Foros del Web. Hola a todos! =) Tengo una dudilla que es sólo por curiosidad, por saber más de php y SQL, y también por una apuesta que ...
  #1 (permalink)  
Antiguo 30/06/2011, 18:08
 
Fecha de Ingreso: octubre-2008
Mensajes: 171
Antigüedad: 15 años, 6 meses
Puntos: 2
Dos SQL en uno

Hola a todos! =)

Tengo una dudilla que es sólo por curiosidad, por saber más de php y SQL, y también por una apuesta que tengo con un amigo. Es posible hacer que en un SQL de select:

mysql_query("SELECT puntos FROM tabla WHERE id = '$id' and pw = '$pw'")

ejecute también un update que lo ponga el usuario? Es decir, es una pagina con dos inputs type=text, uno de id y otro de contraseña, si en el de id pones por ejemplo

' and nivel = (update alexolleta set puntos = '6500' where id = 'ice') and puntos = '

Entonces se quedaría algo así:

"SELECT puntos FROM tabla WHERE id = '' and nivel = (update tabla set puntos = '6500' where id = 'yo') and puntos = '' and pw = 'contraseña'"

Pero no me funciona. Ya he visto que cambia los ' que envia el usuario por \', pero luego he puesto un str_replace para que quite los \ y se queda perfecto. Hay alguna forma de hacer que eso funcione? Es decir, de meter un update dentro de un select?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 30/06/2011, 18:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Dos SQL en uno

No, eso es un error de sintaxis, lo que sí puedes hacer es ejecutar dos SQLs así:
Código SQL:
Ver original
  1. SELECT * FROM foo; UPDATE bar SET foo=bar;

El carácter ; es el separador, afortunadamente viene desactivado por default y mysql_query solo te permite enviar un SQL por cada llamada.

Saludos.
  #3 (permalink)  
Antiguo 30/06/2011, 18:17
 
Fecha de Ingreso: octubre-2008
Mensajes: 171
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Dos SQL en uno

Cita:
Iniciado por GatorV Ver Mensaje
No, eso es un error de sintaxis, lo que sí puedes hacer es ejecutar dos SQLs así:
Código SQL:
Ver original
  1. SELECT * FROM foo; UPDATE bar SET foo=bar;

El carácter ; es el separador, afortunadamente viene desactivado por default y mysql_query solo te permite enviar un SQL por cada llamada.

Saludos.
Gracias por tu respuesta =)

¿Cómo se hace para activarlo?

Un saludo!
  #4 (permalink)  
Antiguo 30/06/2011, 21:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Dos SQL en uno

No se puede, la extensión mysql de PHP no soporta, tendrías que usar la extensión MySQLi y la función mysqli_multi_query.

Saludos.
  #5 (permalink)  
Antiguo 01/07/2011, 04:13
 
Fecha de Ingreso: octubre-2008
Mensajes: 171
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Dos SQL en uno

Cita:
Iniciado por GatorV Ver Mensaje
No se puede, la extensión mysql de PHP no soporta, tendrías que usar la extensión MySQLi y la función mysqli_multi_query.

Saludos.
Muchas gracias! =)
  #6 (permalink)  
Antiguo 01/07/2011, 04:48
 
Fecha de Ingreso: octubre-2008
Mensajes: 171
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Dos SQL en uno

Cita:
Iniciado por GatorV Ver Mensaje
No se puede, la extensión mysql de PHP no soporta, tendrías que usar la extensión MySQLi y la función mysqli_multi_query.

Saludos.
Una cosilla pongo lo de mysqli_multi_query() y me dice lo de "call to undefined function". ¿Qué es lo que ocurre?
  #7 (permalink)  
Antiguo 01/07/2011, 04:53
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Dos SQL en uno

Cita:
Iniciado por davape9 Ver Mensaje
Una cosilla pongo lo de mysqli_multi_query() y me dice lo de "call to undefined function". ¿Qué es lo que ocurre?
No tendrás mysqli activado ;)

De todas formas, ¿cuál es el problema si haces dos consultas? Con mysqli tb tendrás q hacer dos... (en la misma funcion, pero serán dos!)

Un saludo
  #8 (permalink)  
Antiguo 01/07/2011, 04:54
 
Fecha de Ingreso: octubre-2008
Mensajes: 171
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Dos SQL en uno

Cita:
Iniciado por Eleazan Ver Mensaje
No tendrás mysqli activado ;)

De todas formas, ¿cuál es el problema si haces dos consultas? Con mysqli tb tendrás q hacer dos... (en la misma funcion, pero serán dos!)

Un saludo
Es solo curiosidad programera y también por una apuesta que tengo con un amigo jejeje :D Una cosa, cómo se activa ese mysqli?
  #9 (permalink)  
Antiguo 01/07/2011, 05:01
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Dos SQL en uno

Cita:
Iniciado por davape9 Ver Mensaje
Es solo curiosidad programera y también por una apuesta que tengo con un amigo jejeje :D Una cosa, cómo se activa ese mysqli?

NPI, a mi me viene activado por defecto! Pero supongo q será como una extensión de php ;)

PD: http://es.php.net/manual/es/book.mysqli.php

Tendrás q cambiar un par de cosillas de los query / conexiones a bbdd / etc
  #10 (permalink)  
Antiguo 01/07/2011, 05:02
 
Fecha de Ingreso: octubre-2008
Mensajes: 171
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Dos SQL en uno

Cita:
Iniciado por Eleazan Ver Mensaje
NPI, a mi me viene activado por defecto! Pero supongo q será como una extensión de php ;)

PD: http://es.php.net/manual/es/book.mysqli.php

Tendrás q cambiar un par de cosillas de los query / conexiones a bbdd / etc
Muchas gracias =) le echaré un vistazo a ver si lo consigo jejej
  #11 (permalink)  
Antiguo 01/07/2011, 05:03
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Dos SQL en uno

Igualmente, no es más facil que hagas tu una función en plan:
Código PHP:
function mysql_multi_query($sql$link) {
$sql explode(";",$sql);
$r true;
foreach(
$sql as $sentencia) {
    if(
$sentencia[0] == 'S') {
        
//Es un select, interesa el recordset!
        
$r mysql_query($sentencia$link);
    }
    else 
mysql_query($sentencia$link);
}
return 
$r

Aunq lo ideal, en vez de explode, sería una expresión regular para obtener las partes separadas por ; que no fueran encapsuladas por comillas xD

Ah, y sólo aceptaria un SELECT (o mejor dicho, sólo te devolvería un select >.>... si haces dos selects, solo tendrías el último xD)

PD: No puedes juntar un SELECT con un UPDATE creo recordar... tienen q ser dos sentencias separadas siempre xD (o no era así? :S)

Última edición por Eleazan; 01/07/2011 a las 05:14 Razón: Revisión de la función
  #12 (permalink)  
Antiguo 01/07/2011, 05:22
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Dos SQL en uno

Cita:
Iniciado por GatorV Ver Mensaje
El carácter ; es el separador, afortunadamente viene desactivado por default y mysql_query solo te permite enviar un SQL por cada llamada.
Leyendo la documentación de mysql (q tb dice eso) parece que es errónea...


Si haces:
Código PHP:
mysql_connect($server$user$bbddfalse65536); 
Mysql_query debería soportar varias sentencias... pero sólo te devolverá el resultado de la primera xD
  #13 (permalink)  
Antiguo 01/07/2011, 07:20
 
Fecha de Ingreso: octubre-2008
Mensajes: 171
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Dos SQL en uno

Muchas gracias por todo ^^ Me ha servido =)
  #14 (permalink)  
Antiguo 01/07/2011, 08:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Dos SQL en uno

Cita:
Iniciado por Eleazan Ver Mensaje
Leyendo la documentación de mysql (q tb dice eso) parece que es errónea...


Si haces:
Código PHP:
mysql_connect($server$user$bbddfalse65536); 
Mysql_query debería soportar varias sentencias... pero sólo te devolverá el resultado de la primera xD
Cierto, aunque realmente hacerlo te puede traer más problemas que beneficios, ya que es un agujero de seguridad muy grande, lo mejor es enviar por separado los queries, y aún mejor usar Stored Procedures.
  #15 (permalink)  
Antiguo 01/07/2011, 08:53
 
Fecha de Ingreso: octubre-2008
Mensajes: 171
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Dos SQL en uno

Cita:
Iniciado por GatorV Ver Mensaje
Cierto, aunque realmente hacerlo te puede traer más problemas que beneficios, ya que es un agujero de seguridad muy grande, lo mejor es enviar por separado los queries, y aún mejor usar Stored Procedures.
Sip, tienes razón, pero sólo era por curiosidad.

Etiquetas: sql
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 18:15.