Php 每年在mysql中添加具有条件的行

Php 每年在mysql中添加具有条件的行,php,mysql,Php,Mysql,我有一张包含以下字段的学生课程表 id,学生id,班级,年份 我想在每年之后添加一个包含 id,学生id,班级+1,年级+1 对于类为4的行,停止添加新行。 我试过这样的方法,但没有得到我想要的结果 SET GLOBAL event_scheduler = ON; CREATE EVENT increment_student_form ON SCHEDULE STARTS '2013-03-22 11:45:00' EVERY 1 YEAR DO $students=arr

我有一张包含以下字段的学生课程表 id,学生id,班级,年份 我想在每年之后添加一个包含 id,学生id,班级+1,年级+1 对于类为4的行,停止添加新行。 我试过这样的方法,但没有得到我想要的结果

SET GLOBAL event_scheduler = ON;

 CREATE EVENT increment_student_form
 ON SCHEDULE 
 STARTS '2013-03-22 11:45:00'
 EVERY 1 YEAR

 DO 

 $students=array();
 $class=array();
 $stud=select * from student_class where class<4;
        $row=mysql_fetch_array($stud);
    $students[]=$row['student_id'];
    $class[]=$row['class'];
    for($i=0;$i<sizeof($students);$i++){

 INSERT into student class(id,student_id,class,year) values('','$student[i]','$class[i]+1','$year+1') 
 }
使用事件主体的“开始-结束”

DO 
    Begin
    ...
    ...
    END
编辑1:对select语句也使用引号

$stud="select * from student_class where class<4";

我在你的代码中发现了一些错误

您当前的代码将只获取第一条记录。mysql\u fetch\u数组应该在循环中。 我在任何地方都看不到$year的定义。 混合使用mysql事件处理和php代码的方式是不正确的。 尝试使用此代码

 $stud="select * from student_class where class<4";
 while ($row=mysql_fetch_array($stud))
 {
  $sql = "INSERT into student class(id,student_id,class,year) values('','{$row['student_id']}','{$row['class']}','{$row['year']}+1')" ;
  mysql_query($sql);
 }

我建议您最好在这个php脚本上使用crone作业,而不是mysql事件处理。

好的,您的问题完全在SQL中。因此,不允许在SQL查询中使用PHP。 查看更多语法选项。 从手册中的以下内容开始:

CREATE EVENT event
ON SCHEDULE
  EVERY 1 YEAR STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE 
COMMENT 'Clears out sessions table each hour.'
DO
这将清除语法问题,并创建一个空事件,该事件每年运行一次,并在创建1分钟后启动。 从这里我只能假设正确的方法。比如:

BEGIN
  DECLARE @student INT = 0;
  DECLARE @class INT = 0;
  DECLARE @year INT = 0;
  DECLARE MyCursor CURSOR FOR 
  SELECT student_id, class, year FROM student_class WHERE class < 4;

  OPEN MyCursor;

  FETCH NEXT FROM MyCursor
  INTO @student,@class,@year;
  WHILE  @@FETCH_STATUS = 0
  BEGIN
    SET @year = @year + 1;
    SET @class = @class + 1;
    INSERT into student_class(student_id,class,year) values(@student, @class ,@year ) 
    FETCH NEXT FROM MyCursor INTO @student,@class,@year;
  END
  CLOSE MyCursor;
  DEALLOCATE MyCursor;
END
所以这个SQL对我来说是完全未知的,我想这可能会给你足够的提示,让你自己解决问题,或者问一个新的更具体的问题!
祝你好运

$year来自何处?来自student_class Table它返回一个错误'1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解在“开始”2013-04-03 14:25:00“每1分钟做$students=array”第3行附近使用的正确语法,因为我认为这需要使用SQL语法,在这里,您不允许使用PHP,不是吗?在这方面我帮不了你,我不是最好的SQL程序员。我想你需要某种程序来运行你的活动。我完全根据新信息重新安排了我的答案!试试看^^我试过了,但结果是1064-您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解第11行“openmycursor”附近使用的正确语法。正如我所说,我从未用SQL编程。但也许我发现了一些错误。再试一次,但这将是我能带给你的。如果它仍然不起作用,可以使用PHP的cron作业,或者询问与此相关的另一个问题;查看与您的MySQL服务器版本对应的手册,了解在“开始”2013-03-22 11:45:00“每1年做$stud=select*from stude”第3行附近使用的正确语法。您不应将其与MySQL事件处理语句混在一起。。这只是一个php脚本。。将其保存在.php扩展名文件中并在其上设置crone作业…@internally1事件将不会被创建。。。为脚本设置cron作业时。。那么你不必有mysql事件那么我怎样才能创建事件呢??因为我知道你的代码因为单引号而有语法错误,你看到值后面的语法突出显示是如何不正确的吗?