【问题标题】:Mysql Delimiter works in mysql but not in PHPMysql Delimiter 适用于 mysql 但不适用于 PHP
【发布时间】:2016-12-07 07:23:55
【问题描述】:

我有这段代码(我替换了用于 mysql 测试目的的变量)在 mysql 和 phpmyadmin 中工作,因此它将 -1 -2 -3 等附加到 course_no:

drop trigger if exists change_course_no;

delimiter |

CREATE TRIGGER change_course_no BEFORE INSERT ON hybrid_locked
FOR EACH ROW BEGIN
declare original_course_no varchar(50);
declare course_no_counter int;
set original_course_no = new.course_no;
set course_no_counter = 1;


while exists (select true from hybrid_locked where course_no = new.course_no) do
set new.course_no = concat(original_course_no, '-', course_no_counter); 
set course_no_counter = course_no_counter + 1;
end while;

END;

|

delimiter ;


insert into hybrid_locked (
requestor_name, academic_unit,
instructor_name, instructor_email, tel_number, creds, more_instructors,
course_name, program_name, term, course_no, classroom, comments, online_exam, participants, hybrid_past1, hybrid_past2, hybrid_past3, date_requested,

main_date_start, main_date_end, main_time_start, main_time_end,
sec_date_start, sec_date_end, sec_time_start, sec_time_end,
unique_date1, unique_date1_time_start, unique_date1_time_end,
unique_date2, unique_date2_time_start, unique_date2_time_end 
)

values ('Smith', 'test',
'Joe', 'joe@gmail.com', '555-555-5555', 'no', '',
'Physics', '', 'summer', 'TEST101', '1025', '', 'yes', '10',
'unsure', 'unsure', 'unsure', '2016-12-05',

'2016-12-06', '2016-12-29', '17:45:00', '19:45:00',
'0000-00-00', '0000-00-00', '00:00:00', '00:00:00',
'0000-00-00', '00:00:00', '00:00:00',
'0000-00-00', '00:00:00', '00:00:00'
);

但是当我将它添加到我的 PHP 脚本时,它会失败并出现错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在“分隔符 |”附近使用的正确语法。 CREATE TRIGGER change_course_no BEFORE INSERT ON hybrid_locked FO' at line 3

这是 PHP 表单中的代码:

$query_hybrid = 

"
drop trigger if exists change_course_no;

delimiter |

CREATE TRIGGER change_course_no BEFORE INSERT ON hybrid_locked
FOR EACH ROW BEGIN
declare original_course_no varchar(50);
declare course_no_counter int;
set original_course_no = new.course_no;
set course_no_counter = 1;


while exists (select true from hybrid_locked where course_no = new.course_no) do
set new.course_no = concat(original_course_no, '-', course_no_counter); 
set course_no_counter = course_no_counter + 1;
end while;

END;

|

delimiter ;


insert into hybrid_locked (
requestor_name, academic_unit,
instructor_name, instructor_email, tel_number, creds, more_instructors,
course_name, program_name, term, course_no, classroom, comments, online_exam, participants, hybrid_past1, hybrid_past2, hybrid_past3, date_requested,

main_date_start, main_date_end, main_time_start, main_time_end,
sec_date_start, sec_date_end, sec_time_start, sec_time_end,
unique_date1, unique_date1_time_start, unique_date1_time_end,
unique_date2, unique_date2_time_start, unique_date2_time_end 
)

values ('$requestor_name', '$academic_unit',
'$instructor_name', '$instructor_email', '$tel_number', '$creds', '$more_instructors', '$course_name', '$program_name', '$term', '$course_no', '$classroom', '$comments', '$online_exam', '$participants', '$hybrid_past1', '$hybrid_past2', '$hybrid_past3', '$date_requested',

'$main_date_start', '$main_date_end', '$main_time_start', '$main_time_end',
'$sec_date_start', '$sec_date_end', '$sec_time_start', '$sec_time_end',
'$unique_date1', '$unique_date1_time_start', '$unique_date1_time_end',
'$unique_date2', '$unique_date2_time_start', '$unique_date2_time_end'
)";

我不明白我在 PHP 脚本中遗漏了什么?

谢谢, 克里斯

【问题讨论】:

    标签: php mysql delimiter


    【解决方案1】:

    无论如何,您可能不应该在 PHP 内部执行此操作,但如果您这样做,您应该使用 mysqli_multi_query

    bool mysqli_multi_query ( mysqli $link , string $query ) 执行一次 或由分号连接的多个查询。

    其他方法不允许您在一次 api 调用中执行多个查询。

    【讨论】:

    • 很遗憾,我无法在当前服务器上使用 mysqli
    • 好吧,如果你在一个只支持 mysql_* 的服务器上,你继续使用它是对自己的巨大伤害。
    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2011-03-12
    • 2012-04-14
    • 1970-01-01
    • 2018-12-19
    相关资源
    最近更新 更多