Tôi đã có một số thủ tục được lưu trữ được thực hiện với MySQL Workbench. Họ làm việc tốt khi sử dụng MySQL bàn làm việc để đưa chúng vào DB thử nghiệm của tôi.Làm thế nào để chèn/tạo các thủ tục lưu sẵn trong mySQL từ PHP?
Bây giờ tôi đang chuẩn bị các kịch bản tạo DB để triển khai và đây là cách duy nhất gây rắc rối cho tôi. Khi tôi sử dụng dòng lệnh/mysql shell, kịch bản hoạt động hoàn toàn tốt. Chỉ khi tôi sử dụng giao diện mysql (i) PHP để thực thi kịch bản - nó không thành công. Không một lời bình.
Tôi sử dụng tập lệnh tạo thủ tục làm bàn làm việc MySQL tạo cho tôi; có nghĩa là, nó có mô hình này:
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL';
vào lúc bắt đầu của kịch bản, sau đó lặp đi lặp lại cho mỗi thủ tục:
DELIMITER $$
USE `dbname`$$
CREATE PROCEDURE `procname`(IN inputparameters)
BEGIN
... thủ tục goes here
;
END$$
DELIMITER ;
Kịch bản này hoạt động tốt nếu chạy từ MySQL Workbench. Nó cũng chạy tốt nếu tôi cố gắng tương tự từ dòng lệnh mysql. Nhưng nó không thực hiện được bất cứ điều gì khi tôi thực hiện nó thông qua giao diện mysqli PHP (thực hiện nó với mysqli_multi_query, nó hoạt động tốt cho các kịch bản khác tạo và điền vào DB). Không có lỗi trả về trên giao diện, không có kết quả (!). Tất cả những gì tôi nhận được là "sai", và thế là xong. mã lỗi là 0, không có thông báo lỗi.
Đó là một WTF lớn đối với tôi, và tôi hy vọng bạn có thể chỉ cho tôi đúng hướng - làm thế nào tôi có thể sửa lỗi này và cài đặt các thủ tục từ PHP?
PS: quyền truy cập root/admin được cung cấp và xác minh (sau khi tất cả, tôi vừa tạo DB với cùng một kết nối, người dùng đã tạo, bảng đã chèn, v.v.).
Thử xóa sử dụng 'dbname'. Cũng thử chạy nếu sử dụng lệnh mysqli_query. – Knubo
Tôi đã xóa tuyên bố USE đó, không có hiệu lực. mysqli_query cũng không thành công - và trong trường hợp này, rõ ràng tại sao: chuỗi chứa nhiều câu lệnh, vì vậy nếu nó * được thực hiện đúng, nó sẽ trả về nhiều kết quả - mysqli_query không xử lý. - đối với các tập lệnh khác, mysqli_multi_query hoạt động hoàn toàn tốt, trả về một hàng kết quả cho mỗi câu lệnh. (hàng trống trên thành công, lưu ý: 1051 dòng như phản ứng để hiển thị cảnh báo; - tất cả như mong đợi). – foo
Tôi đang tiến gần hơn - không có giải pháp, nhưng là một chẩn đoán. DELIMITER dường như được triển khai phía máy khách (!). – foo