【问题标题】:Is it possible to run multiple update queries in one using Joomla?是否可以使用 Joomla 一次运行多个更新查询?
【发布时间】:2012-09-24 05:05:31
【问题描述】:

我想使用 JOOMLA 2.5 一次运行多个 SQL 更新查询。在我的代码下面:

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 中测试,它可以工作。

【问题讨论】:

    标签: php mysql sql joomla joomla2.5


    【解决方案1】:

    默认情况下,PHP 不允许多个查询。您可以通过向 mysql_connect 添加一个参数来强制它这样做,但我不推荐它(它为 SQL 注入打开了巨大的安全漏洞)。

    我不知道 JFactory 是如何处理这个问题的,但如果不同的话我会感到惊讶。

    更多信息:http://de3.php.net/manual/en/function.mysql-query.php#91669

    【讨论】:

    • 好的,所以我认为使用循环会更好。我还尝试测量将花费的时间(0.095135 秒),看起来还可以。感谢您的帮助。
    • 如果您为每个条目设置相同的值,您可以在单个查询中完成:UPDATE #__mytable SET myfield='value' where id IN (1,2,3)
    • 是的,但我没有相同的值。
    • 用mysqli怎么样?支持多查询,joomla支持mysqli
    • 鉴于所有更新都与单个表相关,CASE costruct 也可能是一个可行的解决方案。
    【解决方案2】:

    您必须使用JDatabaseDriver::splitSql() 将多个查询的字符串拆分为单个查询的数组,并一次运行一次。

    这就是内部扩展安装程序的工作方式。

    不用担心cmets,它们会被剥光的。

    $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)
        {
            ...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多