【问题标题】:Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064警告:PDOStatement::execute(): SQLSTATE [42000]:语法错误或访问冲突:1064
【发布时间】:2015-07-29 14:25:16
【问题描述】:

我正在尝试对更新查询进行内部连接,但我的语法出现错误,据我所知,它看起来不错(我可能正在查看某些内容)所有表都在那里,我在这篇文章中为你包含了这些表。

我的错误

警告:PDOStatement::execute(): SQLSTATE[42000]: 语法错误或 访问冲突:1064 您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 'FROM applications INNER JOIN jobs ON 附近使用的语法 applications.app'

我的 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";

我正在内部加入的工作表

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;

我正在更新的应用程序表

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;

【问题讨论】:

  • 您在查询中加入作业表有什么原因吗?对我来说似乎没有必要。
  • 我最终将使用 AND jobs.job_enabled=1 来确保作业已启用,因此是加入的原因。我应该把它包含在我的 OP 中,我的错。

标签: php mysql


【解决方案1】:

MySQL 不支持Update 语句中的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"

【讨论】:

    猜你喜欢
    • 2018-10-09
    • 2015-10-12
    • 1970-01-01
    • 2022-01-25
    • 2017-10-29
    • 2014-01-14
    • 2013-12-02
    • 1970-01-01
    相关资源
    最近更新 更多