2017-07-25 85 views
-1

我想从php代码创建mysql用户帐户。我的代码正在工作,但无法登录到使用该代码创建的用户帐户。这是我的PHP代码如何使用php创建mysql用户pdo

//include database connection function 
include("dbcon.inc.php"); 

//prepare db connection 
dbcon(1,"root"); 

//call db_user function to create new db user account 
db_user(1,1,"insert","user123"); 

function db_user($user_admin,$user_active,$user_action,$user_name){ 
    global $conn; 
    $sql_query=""; 
    $host_name="localhost"; 
    $staff_password="123"; 
    $database_name="smart_lib"; 

    if($user_action=="insert"){ 
     //create user account 
     $sql_query="CREATE USER '$user_name'@'$host_name' IDENTIFIED WITH mysql_native_password AS '$staff_password';"; 
    } 
    elseif($user_action=="update"){ 
     //update 
     $sql_query="REVOKE ALL PRIVILEGES ON *.* FROM '$user_name'@'$host_name';"; 
    } 

    //if user is active give privilages 
    if($user_active==1){ 
     //if user is an admin give admin privilages 
     if($user_admin==1){ 
      $sql_query.="GRANT ALL PRIVILEGES ON *.* TO '$user_name'@'$host_name' REQUIRE NONE WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;"; 
     } 
     //if user not an admin give privilages without grant optin 
     else{ 
      $sql_query.="GRANT SELECT, INSERT, UPDATE, DELETE ON `$database_name`.* TO '$user_name'@'$host_name'; FLUSH PRIVILEGES;"; 
     } 
    } 
    $sql = $conn->prepare($sql_query); 
    $sql->execute(); 

    echo $sql_query."<br/>"; 
} 

我使用echo $sql_query得到查询和执行它在PHP myadmin。它工作正常。

这是我的数据库连接。

​​
+0

你正在得到哪个错误? – user3663

+0

你有没有想过,也许这是你的登录代码不起作用? –

+0

代码正在工作。没有错误。但无法登录到创建的用户。 –

回答

0

这些都是正确的SQL语句 - 测试:

// Build another variable: 
$user = $user_name . '@' . $host_name; 

// Sql statements: 

$sql_query = "CREATE USER `" . $user . "` IDENTIFIED WITH mysql_native_password AS '" . $staff_password . "';"; 

$sql_query = "REVOKE ALL PRIVILEGES ON *.* FROM `" . $user . "`;"; 

$sql_query .= "GRANT ALL PRIVILEGES ON *.* TO `" . $user . "` REQUIRE NONE WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;"; 

$sql_query .= "GRANT SELECT, INSERT, UPDATE, DELETE ON `" . $database_name . "`.* TO `" . $user . "`; FLUSH PRIVILEGES;"; 


注:

问题居住 - 至少在我的测试 - 在用户的这种表示名称:'$user_name'@'$host_name'。我个人的测试表明这一点:

User created

通常,在传递特殊字符(如“@”)时使用反引号。

我也推荐您在prepare()和​​之间使用异常处理。

当你使用预处理语句时,你应该绑定输入参数,而不是直接将它们传递给sql语句。对于此任务,请使用bindValue()bindParam()函数。

并且不要使用global连接变量,而是在需要它的页面上创建一个连接并将其作为参数传递给每个函数。

也许这将是有益的:

Complete example of PDO w. prepared statements and exception handling(尤其见 “generalFunctions.php”)。

发展组织(不生产!)使用错误报告和显示:

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

祝你好运!