首页 文章

警告:PDOStatement :: execute():SQLSTATE [42000]:语法错误或访问冲突:1064

提问于
浏览
0

我正在尝试内部联接更新查询,但我得到一个关于我的语法的错误,据我所知,它看起来很好(我可能正在查看的东西)所有的表都在那里,我已经包含在这篇文章中为你 .

My error

警告:PDOStatement :: execute():SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在“FROM applications INNER JOIN jobs on applications.app”附近使用正确的语法 .

My SQL

$sql = "UPDATE applications 
         SET    applications.application_status = 1 
         FROM   applications
         INNER JOIN jobs 
         ON applications.application_job = jobs.job_id 
         WHERE  applications.application_user = ?
         AND jobs.job_enabled=1";

Jobs table I am inner joining

CREATE TABLE IF NOT EXISTS `jobs` (
  `job_id` int(11) NOT NULL,
  `job_name` varchar(100) NOT NULL,
  `job_description` text NOT NULL,
  `job_duration` int(11) NOT NULL,
  `job_country` varchar(100) NOT NULL,
  `job_category` int(50) NOT NULL,
  `job_user` int(100) NOT NULL,
  `job_employer` varchar(100) NOT NULL,
  `job_enabled` int(2) NOT NULL DEFAULT '1',
  `job_startdate` date NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

Applications table I am updating

CREATE TABLE IF NOT EXISTS `applications` (
  `application_id` int(11) NOT NULL,
  `application_user` varchar(100) NOT NULL,
  `application_date` datetime NOT NULL,
  `application_job` int(11) NOT NULL,
  `application_status` int(11) DEFAULT '0',
  `application_enabled` int(2) NOT NULL DEFAULT '1'
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

1 回答

  • 0

    MySQL不支持 Update Statement中的FROM子句 . 与SQL Server不同, join 语句也需要在 SET 之前 . 你可以这样做:

    $sql = "UPDATE applications a
            INNER JOIN jobs j ON a.application_job = j.job_id                             
            SET    a.application_status = 1 
            WHERE  a.application_user = ?
              AND  j.jobs_enabled = 1"
    

相关问题