2012-10-03 11 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

すべてのエントリに同じ値を設定した場合、1つのクエリでそれを実行できます: '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) 
    { 
     ... 
    } 
} 
関連する問題