2011-07-25 18 views
14

Digamos que quería hacer UPDATE table SET name = 'bob' y UPDATE table SET age = 55 WHERE name = 'jim' ¿cómo los hago en la misma mysql_query()?¿Cómo se hacen múltiples declaraciones SQL en una mysql_query?

EDIT: Dado que esta cuestión tiene una buena cantidad de puntos de vista que me gustaría señalar que a partir de PHP 5.5 mysql_querymysql_* y otras funciones están ahora obsoleto y no debe utilizarse.

+1

mysql_query() (y el controlador mysql de PHP en general) no admiten múltiples consultas en una sola llamada a query() por razones de seguridad: elimina uno de los vectores de ataque de inyección SQL. En otras palabras: NO PUEDES HACERLO. –

Respuesta

13

Nunca he intentado esto, pero creo que puedes usar mysqli::multi_query. Una de las cosas buenas de mysql_query al rechazar varias declaraciones es que descarta inmediatamente algunos de los ataques de inyección SQL más comunes, como agregar '; DELETE FROM ... # a una declaración. Por lo tanto, es posible que desee tener cuidado con múltiples declaraciones.

7

Como se dice en la parte superior de la manual:

mysql_query() envía una consulta única (varias consultas no son compatibles) a la base de datos activa en el servidor que está asociada con la id_enlace especificado.

+10

Puede obtener burla casi en cualquier otro lugar en Internet - Saludos a Leandro por * no * traerlo a SO. :PAG –

2

Usted puede hacer la actualización "condicional" de esta manera:

create table test (
id int not null auto_increment primary key, 
name varchar(50), 
age tinyint 
) engine = myisam; 

insert into test (name) values ('jim'),('john'),('paul'),('mike'); 


update test 
set age = 
case 
when name = 'jim' then 10 
when name = 'paul' then 20 
else 30 
end 

esperanza de que le ayuda.

Cuestiones relacionadas