Joomla3:手动更新数据库中的表


Joomla3: manually updating a table in the database

我有很多文章需要复制到joomla+k2网站,我不想去后台逐个添加,所以我现在尝试直接更新数据库,部分是为了学习。

我已经创建了一个k2项目并复制它,直到我有足够的假项目,这样我只需要更新titleintrotext,忽略其他字段,并且我已经用JSON准备了文章。

现在我的第一个问题是,把这个放在哪里最好。要操作数据库的PHP文件它必须准备好数据库连接,并且不加载页面。目前,我在ROOT下使用index.php文件的副本,已经注释掉了$app->execute();,所以它实际上不会加载页面。虽然数据库连接很好(我成功地从表中"选择"了数据),但感觉很尴尬,而且我不能使用像"j!dump"这样的开发插件。

其次,也是更重要的,我的代码不起作用:我从文档中复制代码,并尽可能少地进行更改,但它不起作用,$resulttrue,但表根本没有更新。由于对joomla编码和数据库知之甚少,我不可能自己调试它。

define('_JEXEC', 1);
if (file_exists(__DIR__ . '/defines.php'))
{
    include_once __DIR__ . '/defines.php';
}
if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', __DIR__);
    require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
// Set profiler start time and memory usage and mark afterLoad in the profiler.
JDEBUG ? $_PROFILER->setStart($startTime, $startMem)->mark('afterLoad') : null;
// Instantiate the application.
$app = JFactory::getApplication('site');
//mycode
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$fields = array(
    $db->quoteName('title') . ' = ' . $db->quote('asdfasdf')
);
$conditions = array(
    $db->quoteName('id') . ' = 2'
);
$query->update($db->quoteName('#__k2_items'))->set($fields)->where($conditions);
$result = $db->execute();

没有错误,$db->execute()返回true,请教我发生这种情况时如何调试?

将文件放在index.php文件的同一级别是可以的,但请确保添加某种哈希以通过浏览器访问文件。例如,链接应该是www.yourdomain.com/youfile.php?hash=123467890

提供哈希将阻止其他人运行您的文件。

至于您的查询不起作用,请尝试以下操作(对于这样的脚本,不需要遵循严格的Joomla查询方法):

$db = JFactory::getDbo();
$sql = "Your SQL query";
$db->setQuery($sql);
$db->query();