Php 是否可以使用Joomla一次运行多个更新查询?
我想使用JOOMLA 2.5一次运行多个SQL更新查询。下面是我的代码: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
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也可能是一个可行的解决方案。