2017-07-25 86 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); 

祝你好運!