2012-08-14 35 views
8

Tôi muốn làm điều này:MySQL TẠO NGƯỜI DÙNG với biến?

#Variables 
SET @username="jdoe", @password="secret"; 

# Insert a new MySQL User 
CREATE USER @[email protected]'localhost' IDENTIFIED BY @password;GRANT USAGE ON *.* TO @[email protected]'localhost' IDENTIFIED BY @password WITH MAX_QUERIES_PER_HOUR 120 MAX_CONNECTIONS_PER_HOUR 60 MAX_UPDATES_PER_HOUR 60 MAX_USER_CONNECTIONS 2; 

Nhưng nhận được:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@[email protected]'localhost' IDENTIFIED BY @password' at line 2 

Làm thế nào để sử dụng một biến trong câu lệnh CREATE USER?

+0

thể trùng lặp của [lỗi cú pháp từ CREATE USER với các biến cho tên truy cập và mật khẩu] (http://stackoverflow.com/questions/11368966/syntax-error-from -create-user-with-variables-giving-username-and-password) – aleroot

+1

@aleroot Tôi không chắc đó là vấn đề tương tự vì nó liên quan đến việc tạo một thủ tục lưu sẵn. – Nick

Trả lời

9

Bạn có thể sử dụng dynamic SQL như:

SET @query1 = CONCAT(' 
     CREATE USER "',@username,'"@"localhost" IDENTIFIED BY "',@password,'" ' 
     ); 
PREPARE stmt FROM @query1; EXECUTE stmt; DEALLOCATE PREPARE stmt; 

SET @query1 = CONCAT(' 
    GRANT USAGE ON *.* TO "',@username,'"@"localhost" IDENTIFIED BY "',@password,'" WITH 
      MAX_QUERIES_PER_HOUR 120 MAX_CONNECTIONS_PER_HOUR 60 MAX_UPDATES_PER_HOUR 60 
      MAX_USER_CONNECTIONS 2' 
     ); 
PREPARE stmt FROM @query1; EXECUTE stmt; DEALLOCATE PREPARE stmt; 
+0

Điều này dường như không hoạt động ... Tôi nhận được '# 1064 - Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn để có cú pháp đúng để sử dụng gần 'bí mật; SỬ DỤNG LỚN TRÊN *. * ĐẾN jdoe @ 'localhost' được xác định bằng bí mật 'tại dòng 1 ' – Nick

+0

dấu ngoặc kép bị bỏ lỡ. thử truy vấn cập nhật. – Omesh

+1

Tuyệt vời, cảm ơn bạn! – Nick

Các vấn đề liên quan