我正在使用 PHP 将数据发布到 mysqlserver 中。 (休息服务) 问题是我收到此错误:
Connection failed: Access denied for user 'root'@'localhost' (using password: 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();
?>
最佳答案
这里发生的事情是您正在为您的数据库和 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()
truth。
密码
我还注意到您可能以明文形式存储密码。不建议这样做。
使用以下之一:
- CRYPT_BLOWFISH
-
crypt()
-
bcrypt()
-
scrypt()
- On OPENWALL
- PBKDF2
- PBKDF2 on PHP.net
- PHP 5.5
password_hash()
功能。 - 兼容包(如果 PHP < 5.5)https://github.com/ircmaxell/password_compat/
其他链接:
添加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
是两种不同的动物,并且区分大小写。
关于Php 插入后错误访问被拒绝用户 'root' @'localhost'(使用密码 : YES),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34827848/