2012-08-14 19 views
8

me gustaría hacer esto:MySQL CREAR USUARIO con una variable?

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

Pero sale:

#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 

¿Cómo se utiliza una variable en la instrucción CREATE USER?

+0

posible duplicado de [error de sintaxis de CREATE USER con variables que dan nombre de usuario y contraseña] (http://stackoverflow.com/questions/11368966/syntax-error-from -create-user-with-variables-giving-username-and-password) – aleroot

+1

@aleroot No estoy seguro de que sea el mismo problema, ya que se trata de crear un procedimiento almacenado. – Nick

Respuesta

9

Se puede utilizar como dynamic SQL:

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

Esto no parece funcionar ... Obtengo '# 1064 - Tiene un error en su sintaxis de SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'secreto; USO DE SUBVENCIÓN EN *. * TO jdoe @ 'localhost' IDENTIFICADO POR secreto 'en la línea 1 ' – Nick

+0

omisión de comillas. prueba la consulta actualizada – Omesh

+1

Excelente, ¡gracias! – Nick

Cuestiones relacionadas