2016-04-27 32 views
-3

我已經建立了基本的表格和連接與數據庫的PHP文件。我可以使用SELECT從數據庫中獲取數據。然而,當我嘗試使用UPDATEINSERT INTO,我得到的消息:權利INSERT phpMyAdmin的MySQL的

"INSERT command denied to user ''@'localhost' for table 'table_data'".

當我嘗試使用PMA查詢,我能夠插入數據。但是當我想調整用戶權利時,它說我沒有權利這麼做。但是,當我使用SQL SHOW補助,我得到:

"Grants for [email protected]% GRANT USAGE ON . TO 'xxxl'@'10.0.%' IDENTIFIED BY PASSWORD GRANT ALL PRIVILEGES ON 'database_name'.* TO 'xxx'@'10.0.%' WITH GRANT OPTION.

我使用我的主機提供的,所以我認爲它是根用戶的唯一的MySQL賬戶。

$servername = "mysql.domain_name.nl";  
$username = 'xxx'; 
$password = 'xxx'; 

$conn = new mysqli($servername, $username, $password);` 

$username = $_POST['username']; 
$password = $_POST['password']; 
$query = "INSERT INTO 'game'.'login_data' ('username', 'password') VALUES ('".$username."', '".$password."')"; 
$data = mysql_query ($query)or die(mysql_error()); 

請幫我獲得權利才能INSERT

+0

你的代碼是字面上的語法錯誤縫合。 –

+0

你混合'的MySQLi與準備Statements'和'MySQL' - 堅持只有一個! –

+0

不僅僅如此,但這=> http://stackoverflow.com/questions/11321491/when-to-use-single-quotes-double-quotes-and-backticks誰知道這些POST數組包含和沒有選擇一個數據庫。 –

回答

1

首先,你需要使用庫MySQLi讀了。你需要的一切是在這裏:http://php.net/manual/en/book.mysqli.php

你會看到,你缺少1個參數從$conn 有待new mysqli('localhost', 'my_user', 'my_password', 'my_db');

$servername = "mysql.domain_name.nl"; 
$username = 'xxx'; 
$password = 'xxx'; 

$conn = new mysqli($servername, $username, $password, **add database**); 

$username = $_POST['username']; 
$password = $_POST['password']; 

對於要使用準備好的語句安全着想。 它更改爲以下:

if ($stmt = $conn->prepare("INSERT INTO `game`.`login_data` (username, password) VALUES (?, ?)")) { 
     $stmt->bind_param('ss', $username , $password); 
     // Execute the prepared query. 
     if (! $stmt->execute()) { 
      $stmt->close(); 
     } 
    } 
} 

當然這不是你應該完全把用戶數據庫的方式。你想哈希密碼,存儲鹽等,但對於這個問題。以上應該夠了。

+0

'INSERT INTO '遊戲'。 'login_data'( '用戶名', '密碼')'這是一個重大的失敗。錯誤的標識符限定符類型。 –

+0

他們是列名。沒有?那有什麼不對? – Matt

+0

'INSERT INTO'game'。'login_data'('username','password')'這些是單引號'''而不是應該沒有引號或滴答聲'''' - 這裏有兩種不同的動物; - ) –

0

我已經收拾你的代碼,固定的語法錯誤,以及整個代碼切換到PDO。

的MySQL已被棄用,庫MySQLi是開放的SQL注入黑客,甚至mysqli_real_escape_string

<?php 
$user = 'xxx'; 
$pass = 'xxx'; 

$conn = new PDO('mysql:host=localhost;dbname=mysql.domain_name.nl', $user, $pass); 

$username = $_POST['username']; 
$password = $_POST['password']; 
$stmt = $conn->prepare("INSERT INTO `game`.`login_data` ('username', 'password') VALUES (:username, :password)"); 
$stmt->bindParam(':username', $username); 
$stmt->bindParam(':password', $password); 
$stmt->execute(); 
?> 

有關PDO的更多信息,這裏參考手冊:http://php.net/manual/en/book.pdo.php

+0

我收到此錯誤:致命錯誤:有消息「SQLSTATE [HY000] [1045]訪問被拒絕的用戶‘$用戶’@」 localhost」的(使用密碼未捕獲的異常「PDOException」 :YES)'in /register_script.php:5 Stack trace:#0 /register_script.php(5):PDO - > __ construct('mysql:host = loca ...','$ user','$ pass') #1 {main}在第5行拋出/register_script.php – Tom

+0

@Tom你介意我問你正在使用哪個免費託管服務提供商?我有一種感覺,用戶名不是'root',你必須自己設置一個(數據庫)。 –

+0

我使用DataCT,它是荷蘭人。我已經爲他們設置了自己的用戶名和密碼。 – Tom