Nỗ lực của tôi để truy vấn MySQL từ PHP với một câu lệnh tạo thủ tục lưu trữ (SP) đều thất bại. Điều này là không thể?Làm thế nào để tạo một thủ tục lưu sẵn MySQL từ PHP?
Nếu thực sự có thể, vui lòng đưa ra ví dụ.
Nỗ lực của tôi để truy vấn MySQL từ PHP với một câu lệnh tạo thủ tục lưu trữ (SP) đều thất bại. Điều này là không thể?Làm thế nào để tạo một thủ tục lưu sẵn MySQL từ PHP?
Nếu thực sự có thể, vui lòng đưa ra ví dụ.
Hướng dẫn sử dụng MySQL có tổng quan rõ ràng về how to create stored procedures (13.1.15. CREATE PROCEDURE
and CREATE FUNCTION
Syntax).
Câu hỏi tiếp theo là: tài khoản bạn sử dụng để truy cập cơ sở dữ liệu MySQL quyền propper có thực sự tạo thủ tục không?
chi tiết về câu hỏi này có thể được tìm thấy ở đây: 19.2.2. Stored Routines and MySQL Privileges
Bạn có đủ đặc quyền đối với tài khoản bạn đang kết nối từ PHP không? Từ the manual
Tính đến MySQL 5.0.3, để thực hiện CREATE PROCEDURE hoặc CREATE FUNCTION tuyên bố, nó là cần thiết để có CREATE đặc quyền ROUTINE
Xem thêm Stored Routines and MySQL Privileges trong cuốn hướng dẫn.
Chừng nào:
Sau đó, nó sẽ hoạt động. Kiểm tra chúng và lấy lại cho chúng tôi.
Bên cạnh các đặc quyền, những gì hoàn toàn có thể có thể gây ra vấn đề của bạn, mà thực sự mysql_query ($ query) chỉ có thể làm việc một lệnh cho mỗi cuộc gọi!
Vì vậy, những gì bạn phải làm là chia các lệnh thành các lệnh mysql_query ($ query) sevaral.
gì tôi có nghĩa là một cái gì đó như thế này:
$query = "DROP FUNCTION IF EXISTS fnElfProef (accountNr INT)";
mysql_query($query);
$query = "CREATE FUNCTION fnElfProef (accountNr INT)
RETURNS BOOLEAN
BEGIN
DECLARE i, totaal INT DEFAULT 0;
WHILE i < 9 DO
SET i = i+1;
SET totaal = totaal+(i*(accountNr%10));
SET accountNr = FLOOR(accountNr/10);
END WHILE;
RETURN (totaal%11) = 0;
END";
mysql_query($query);
$query = "SELECT * FROM mytable";
mysql_query($query);
Bạn không thể sử dụng câu lệnh DELIMITER từ bên trong PHP. Do đó,
1) remove the DELIMITER statements
2)and change all your delimiters to ;
Đó là khó chịu vì bây giờ bạn cần phải có một phiên bản với delimiters cho sự phát triển và thử nghiệm trong dòng lệnh MySQL hoặc một công cụ MySQL như SQLyog hoặc MySQL workbench, và một phiên bản mà không delimiters sử dụng thông qua PHP của bạn chương trình.
Nếu ai đó biết một cách tốt hơn, tôi muốn nghe nó - (nhưng không phải bằng cách gọi một kịch bản shell OS -. Có quá nhiều vấn đề còn lại)
Và bạn cần quyền SUPER.
http://forums.mysql.com/read.php?98,161275,161275 –