2012-10-03 13 views
5

Quiero ejecutar muchas consultas de actualización de SQL a la vez utilizando JOOMLA 2.5. Debajo de mi código:¿Es posible ejecutar varias consultas de actualización en una usando Joomla?

require_once '../includes/framework.php'; 
$query = "UPDATE #__mytable SET myfield='value' where id=1; UPDATE #__mytable SET 
myfield='value' where id=2; UPDATE #__mytable SET myfield='value' where id=3;"; 
$db = JFactory::getDbo(); 
$db->setQuery($query); 
$db->query(); 

Pero me muestra un error de sintaxis. Traté de probar directamente en MYSQL y funciona.

Respuesta

4

PHP no permite múltiples consultas por defecto. Puede obligarlo a hacerlo agregando un parámetro a mysql_connect, pero no lo recomendaría (abre grandes agujeros de seguridad para las inyecciones de SQL).

No sé cómo maneja esto JFactory, pero me sorprendería si fuera diferente.

Mas informaciones al respecto: http://de3.php.net/manual/en/function.mysql-query.php#91669

+0

Bien, entonces creo que será mejor usar un ciclo. También trato de medir el tiempo que tomará (** 0.095135 segundos **) y parece estar bien. Gracias por tu ayuda. – toto

+0

Si establece el mismo valor para cada entrada, puede hacerlo en una sola consulta: 'UPDATE #__mytable SET myfield = 'value' donde id IN (1,2,3)' –

+0

Sí, pero no tengo el mismos valores. – toto

0

Debe utilizar JDatabaseDriver::splitSql() a dividir una cadena de varias consultas en una serie de consultas individuales, y ejecutarlos una vez a la vez.

Así es como funciona el instalador interno de extensiones.

No se preocupe por los comentarios, se los quitarán.

$sql = "UPDATE #__mytable SET myfield='value' where id=1; UPDATE #__mytable SET myfield='value' where id=2; UPDATE #__mytable SET myfield='value' where id=3;"; 

$db = JFactory::getDbo(); 
$queries = JDatabaseDriver::splitSql($sql); 
foreach ($queries as $query) 
{ 
    try 
    { 
     $db->setQuery($query)->execute(); 
    } 
    catch (JDatabaseExceptionExecuting $e) 
    { 
     ... 
    } 
} 
Cuestiones relacionadas