首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Joomla中的表间移动行

在Joomla中的表间移动行
EN

Stack Overflow用户
提问于 2016-01-03 05:51:33
回答 2查看 95关注 0票数 8

我一直在尝试创建一个PHP脚本,它会定期将“完成”的行从我的Joomla站点上的一个表移动到另一个表中。我编写的查询在PHPMyAdmin中工作得很好:

代码语言:javascript
运行
复制
INSERT INTO my_calsgovdocs.sent_copy
SELECT *  FROM my_calsgovdocs.entered_copy
WHERE `Status` LIKE '%Sent%';
DELETE FROM my_calsgovdocs.entered_copy
WHERE `Status` LIKE '%Sent%';

我试图将它转换成一些可以在Joomla中运行的PHP代码,我已经将这些代码粘贴到了下面。它返回一个“意外的T_STRING”错误,它指向启动->insert into的下面一行,现在我发现脚本不能工作了,因为"insert into“不是一个有效的方法名!到目前为止,我还找不到在Joomla中使用的等效方法。这是我在代码中的尝试:

代码语言:javascript
运行
复制
try
{
    $db->transactionStart();

    $query = $db->getQuery(true);

    $query
        ->insert into($db->quoteName('sent_copy'))
        ->select('*')
        ->from($db->quoteName('entered_copy'))
        ->where($db->quoteName('Status') . ' LIKE ' . $db->quote('%Sent%') . ';')
        ->delete from($db->quoteName('entered_copy'))
        ->where($db->quoteName('Status') . ' LIKE ' . $db->quote('%Sent%'));

    $db->setQuery($query);
    $result = $db->execute();

    $db->transactionCommit();
}
catch (Exception $e)
{
    $db->transactionRollback();
    JErrorPage::render($e);
}

有谁知道我如何在Joomla中实现这一点?我更喜欢(正如你可能已经注意到的)在一个事务中完成它,这样,如果出现错误,我就不会弄得一团糟。

EN

回答 2

Stack Overflow用户

发布于 2017-02-26 10:22:25

$db->setQuery允许将查询字符串作为参数而不是对象传递。请参阅“准备查询”:https://docs.joomla.org/J1.5:Accessing_the_database_using_JDatabase

我还建议将其中两个查询作为同一事务的一部分运行。

不幸的是,我手头上没有joomla安装程序来测试它,如果你发现它不能工作,请评论。

代码语言:javascript
运行
复制
try
{
    $db->transactionStart();

    $query = $db->getQuery(true);

    $query1 = "INSERT INTO my_calsgovdocs.sent_copy
    SELECT *  FROM my_calsgovdocs.entered_copy
    WHERE `Status` LIKE '%Sent%'";

    $db->setQuery($query1);
    $result1 = $db->execute();

    $query2 = "DELETE FROM my_calsgovdocs.entered_copy
    WHERE `Status` LIKE '%Sent%'";

    $db->setQuery($query2);
    $result2 = $db->execute();

    $db->transactionCommit();
}
catch (Exception $e)
{
    $db->transactionRollback();
    JErrorPage::render($e);
}
票数 1
EN

Stack Overflow用户

发布于 2016-01-29 22:10:01

你可以尝试用普通的老式php来做这件事?就像这样

代码语言:javascript
运行
复制
$conf = JFactory::getConfig(); // load your config
try{
  $link = mysqli_connect($conf->get('host'), $conf->get('user'),
    $conf->get('password'), $conf->get('db'));
  mysqli_begin_transaction($link, MYSQLI_TRANS_START_READ_WRITE);
  mysqli_query($link, "INSERT INTO my_calsgovdocs.sent_copy
    SELECT *  FROM my_calsgovdocs.entered_copy
    WHERE `Status` LIKE '%Sent%'");
  mysqli_query($link, "DELETE FROM my_calsgovdocs.entered_copy
    WHERE `Status` LIKE '%Sent%'");
  mysqli_commit($link);
}
catch (Exception $e)
{
  mysqli_rollback($link);
  JErrorPage::render($e);
}
mysqli_close($link);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34571094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档