ERROR 1064 i您的 SQL 语法有误;

ERROR 1064 iYou have an error in your SQL syntax;

您好,我在向数据库中插入数据时遇到错误:

1064 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 'User,hello,2017-03-30 10:42:43,0)' at line 3 SQL=INSERT INTO #__registentrys (name,type_entry,date_regist,published) VALUES (Super User,hello,2017-03-30 10:42:43,0)

我的代码:

$greating1=$this->item->greeting;
                $datetime = new Jdate('now + 1 hour'); //GTM hour Lisbon
                $this->item->menssage1 = $datetime;
                //session portection
                $user = JFactory::getUser();
                if($user->guest)
                {
                    $this->item->menssage2 = "You are not allowed to enter this site";
                }
                else
                {
                    $username = $user->name;
                    $this->item->menssage2 = $username;
                    $db1 = JFactory::getDbo();
                    $query1 = $db1->getQuery(true);

                    // Insert columns.
                    $columns = array('name', 'type_entry', 'date_regist', 'published');


                    // Insert values.
                    $values = array($username, $greating1, $datetime, 0);

                    // Build the query
                    $query1
                    ->insert($db1->quoteName('#__registentrys'))
                    ->columns($db1->quoteName($columns))
                    ->values(implode(',', $values));

                    $db1->setQuery($query1);    
                    $db1->execute();

提前感谢您的回答。

文字值必须在引号内

 SQL=INSERT INTO `#__registentrys` (`name`,`type_entry`,`date_regist`,`published`) 
 VALUES ( 'Super User', 'hello', '2017-03-30 10:42:43',0) 

否则假定为列名

在值上加引号很容易

->values(implode(',', $db1->quote($values)));

Joomla 数据库使用 $db->quote 来保存字符串,否则它会将值假定为列。因此,您需要按照 joomla 语法像这样更改查询。 这行

 $values = array($username, $greating1, $datetime, 0);

需要改为

 $values = array($db1->quote($username), $db1->quote($greating1), $db1->quote($datetime), 0);