2012-10-03 12 views
5

Chcę uruchomić wiele zapytań o aktualizację SQL jednocześnie za pomocą JOOMLA 2.5. Poniżej mojego kodu:Czy można uruchomić wiele zapytań aktualizacji w jednym przy użyciu 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(); 

Ale pokazuje mi błąd składni. Próbowałem przetestować bezpośrednio w MYSQL i działa.

Odpowiedz

4

PHP domyślnie nie dopuszcza wielu zapytań. Możesz to wymusić, dodając parametr do mysql_connect, ale nie poleciłbym go (otwiera ogromne luki w zabezpieczeniach dla iniekcji SQL).

Nie wiem, jak JFactory sobie z tym poradzi, ale byłbym zaskoczony, gdyby było inaczej.

Więcej informacje o tym: http://de3.php.net/manual/en/function.mysql-query.php#91669

+0

Ok, więc myślę, że lepiej będzie użyć pętli. Próbuję też zmierzyć czas, który zajmie (** 0.095135 sekund **) i wydaje się, że jest OK. Dziękuję za pomoc. – toto

+0

Jeśli ustawisz tę samą wartość dla każdej pozycji, możesz zrobić to w jednym zapytaniu: 'UPDATE #__mytable SET myfield = 'value' gdzie id IN (1,2,3)' –

+0

Tak, ale nie mam te same wartości. – toto

0

Musisz użyć JDatabaseDriver::splitSql() do podzielić ciąg wielu zapytań do tablicy indywidualnych zapytań i uruchomić je raz na jakiś czas.

W ten sposób działa instalator wewnętrznych rozszerzeń.

Nie martw się o komentarze, zostaną one usunięte.

$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) 
    { 
     ... 
    } 
} 
Powiązane problemy