2012-08-14 13 views
8

Chciałbym to zrobić:MySQL CREATE USER ze zmienną?

#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; 

Ale się:

#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 

Jak mogę użyć zmiennej w instrukcji CREATE USER?

+0

możliwe duplikat [Błąd składni od utworzyć użytkownika przy zmiennych podając nazwę użytkownika i hasło] (http://stackoverflow.com/questions/11368966/syntax-error-from -create-user-with-variables-giving-username-and-password) – aleroot

+1

@aleroot Nie jestem pewien, czy to ten sam problem, ponieważ dotyczy tworzenia procedury składowanej. – Nick

Odpowiedz

9

Można użyć dynamic SQL jak:

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

To wydaje się nie działać ... Dostaję "# 1064 - Masz błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu 'secret; UŻYTKOWANIE URZĄDZEŃ NA *. * Jdoe @ 'localhost' IDENTYFIKOWANE PRZEZ Tajemnicę "przy linii 1' – Nick

+0

nieodebrane cytaty. spróbuj zaktualizować zapytanie. – Omesh

+1

Doskonale, dziękuję! – Nick

Powiązane problemy