Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以使用Joomla一次运行多个更新查询?_Php_Mysql_Sql_Joomla_Joomla2.5 - Fatal编程技术网

Php 是否可以使用Joomla一次运行多个更新查询?

Php 是否可以使用Joomla一次运行多个更新查询?,php,mysql,sql,joomla,joomla2.5,Php,Mysql,Sql,Joomla,Joomla2.5,我想使用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

我想使用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_connect添加一个参数来强制它这样做,但我不推荐这样做(它为SQL注入打开了巨大的安全漏洞)

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


有关它的更多信息:

您必须使用
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)
    {
        ...
    }
}

好的,我认为使用循环会更好。我还试着测量所需的时间(0.095135秒),看起来还可以。谢谢您的帮助。如果您为每个条目设置相同的值,您可以在一个查询中完成:
UPDATE\uu mytable set myfield='value',其中id位于(1,2,3)
是,但我没有相同的值。使用mysqli怎么样?它支持多个查询,joomla支持MySQLIGI,即使所有更新都与单个表相关,
CASE
costruct也可能是一个可行的解决方案。