2016-04-27 65 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