用户'root'@'localhost'的Php Post插入错误访问被拒绝(使用密码:YES)
Posted
技术标签:
【中文标题】用户\'root\'@\'localhost\'的Php Post插入错误访问被拒绝(使用密码:YES)【英文标题】:Php Post Insert Error Access denied for user 'root'@'localhost' (using password: YES)用户'root'@'localhost'的Php Post插入错误访问被拒绝(使用密码:YES) 【发布时间】:2016-01-16 14:04:44 【问题描述】:我正在使用 php 将数据发布到 mysqlserver。 (休息服务) 问题是我收到了这个错误:
连接失败:用户 'root'@'localhost' 的访问被拒绝(使用 密码:YES)。
我将查询从插入更改为选择语句,它可以工作,我可以检索数据,但我似乎无法进行插入。 我检查了权限,甚至更改了密码。 我敢肯定这个问题之前已经被问过,但我尝试过的解决方案不起作用问题可能是上下文所独有的。 我不确定它是代码还是什么?请帮忙。
<?php
$servername = "localhost";
$username = "root";
$password = "****";
$dbname = "TripBuddy";
$name = $_POST['Name'];
$surname = $_POST['Surname'];
$email = $_POST['Email'];
$password = $_POST['Password'];
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error)
die("Connection failed: " . $conn->connect_error);
$sql = "INSERT INTO 'TripBuddy'.'AppUser01' ('Name', 'Surname', 'Email', 'Password') VALUES ('$name','$surname','$email','$password');";
if ($conn->query($sql) === TRUE)
echo "New record created successfully";
else
echo "Error: " . $sql . "<br>" . $conn->error;
$conn->close();
?>
【问题讨论】:
我愿意打赌,这是因为您对$password
使用了相同的变量。改变其中之一。我敢打赌它会起作用的。
将quotes
从table name and column name
换成backtick
但是,您的查询在这里失败,一旦您更改密码变量,您将看到错误。您需要删除表和列的引号。在使用我的两个 cmets 时,应该可以。编辑:正如@Saty 所说;记号,而不是引号。
另外使用$conn->affected_rows;
来检查你的数据是否插入数据库!!
【参考方案1】:
这里发生的情况是,您在 DB 和 POST 数组中都使用了 $password
。
那么您的查询使用的是常规引号而不是刻度。
$sql = "INSERT INTO `TripBuddy`.`AppUser01` (`Name`, `Surname`, `Email`, `Password`)
VALUES ('$name','$surname','$email','$password');";
您当前的代码对SQL injection 开放。使用mysqli_*
with prepared statements,或PDO 和prepared statements。
编辑:
正如萨蒂所说;使用mysqli_affected_rows()
表示真相。
密码
我还注意到您可能以纯文本形式存储密码。不建议这样做。
使用以下方法之一:
CRYPT_BLOWFISHcrypt()
bcrypt()
scrypt()
On OPENWALL
PBKDF2
PBKDF2 on PHP.net
PHP 5.5 的 password_hash()
函数。
兼容包(如果 PHP https://github.com/ircmaxell/password_compat/
其他链接:
PBKDF2 For PHP将error reporting 添加到文件顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Then the rest of your code
旁注:显示错误应该只在暂存阶段完成,而不是在生产阶段。
确保您的表单确实使用 POST 方法,并且您的输入都具有匹配的名称属性。即:name="Name"
用于您的 POST 数组 $_POST['Name']
等。
Name
和 name
是两种不同的动物,并且区分大小写。
【讨论】:
【参考方案2】:您为用户名 root 提供的密码似乎不正确,有时 localhost root 设置为无需密码即可工作,因此您可以尝试通过提供 $password = ""; 来检查它如果返回错误,则需要输入正确的密码才能创建连接
【讨论】:
以上是关于用户'root'@'localhost'的Php Post插入错误访问被拒绝(使用密码:YES)的主要内容,如果未能解决你的问题,请参考以下文章
“连接失败:用户'root'@'localhost'的访问被拒绝(使用密码:YES)”来自php函数[重复]
用户'root'@'localhost'的Php Post插入错误访问被拒绝(使用密码:YES)
用户 'root'@'localhost' 的访问被拒绝(使用密码:否)
PHP和MySQLi错误 - 访问被拒绝用户'root'@'localhost'(使用密码:NO)[复制]