以编程方式创建文章:SQL语法中存在错误;

时间:2014-09-20 09:57:38

标签: php mysql sql database joomla

我的代码:

<?php

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';

require_once JPATH_BASE . '/libraries/joomla/factory.php';

$db = JFactory::getDbo();

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

$columns = array('title', 'fulltext', 'state', 'catid', 'created_by', 'access');

$values = array('test', 'test test test', 1, 9, 889, 1);

$query
  ->insert($db->quoteName('#__content'))
  ->columns($db->quoteName($columns))
  ->values(implode(',', $values));

$db->setQuery($query);
$db->query();

完整错误:

    Error displaying the error page: Application Instantiation Error: You have an error in your SQL
 syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 
'test test, 1 , 9, 889, 1)' at line 3 SQL = INSERT INTO `cxq09_content` (`title`, `fulltext`, `state`, `catid`, `created_by`, `access`) VALUES (test, test test test, 1, 9, 889, 1)

Joomla安装在OpenServer上。

怎么了?

1 个答案:

答案 0 :(得分:2)

可以使用

来引用insert语句的值
$query
  ->insert($db->quoteName('#__content'))
  ->columns($db->quoteName($columns))
  ->values(implode(',', $db->quote($values)));

如果您的Joomla版本足够新,请参阅documentation to quote

  

引用并可选地将字符串转义为数据库要求   用于数据库查询。

     

quote(mixed $ text,boolean $ escape = true):string

     

注意:在12.3

中添加了接受字符串数组

如果您的版本不接受字符串数组,则必须引用每个数组元素。