2012-10-03 3 views
5

JOOMLA 2.5를 사용하여 한 번에 많은 SQL 업데이트 쿼리를 실행하고 싶습니다. 아래 코드 :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(); 

그러나 구문 오류가 표시됩니다. 나는 MySQL에서 직접 테스트를 시도하고 작동한다.

답변

4

PHP는 기본적으로 여러 쿼리를 허용하지 않습니다. mysql_connect에 매개 변수를 추가하여 강제로 할 수 있지만 SQL 인젝션을위한 엄청난 보안 구멍을 열어 놓는 것은 추천하지 않습니다.

JFactory가이 문제를 어떻게 처리하는지 모르지만 다른 경우 나는 놀랐습니다. 그것에 대해

더 많은 정보를 정기적으로 : http://de3.php.net/manual/en/function.mysql-query.php#91669

+0

좋아, 그래서 루프를 사용하는 것이 좋습니다. 나는 또한 걸릴 (** 0.095135 초 **) 시간을 mesure하려고하고 괜찮아 보인다. 도와 줘서 고마워. – toto

+0

모든 항목에 동일한 값을 설정하면 하나의 쿼리에서 할 수 있습니다. 'UPDATE #__mytable SET myfield ='value '여기서 ID는 IN (1,2,3)' –

+0

예,하지만 같은 값. – toto

0

당신은 개별 쿼리의 배열에 여러 쿼리 문자열을 분할 JDatabaseDriver::splitSql() 에 사용하고, 한 번에 한 번에 실행해야합니다.

이것은 내부 확장 프로그램 설치 프로그램의 작동 방식입니다.

댓글에 대해 걱정하지 마세요. 댓글이 삭제 될 것입니다.

$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) 
    { 
     ... 
    } 
} 
관련 문제