【发布时间】:2021-01-20 10:57:00
【问题描述】:
我正在尝试将值插入 MySQL 数据库但没有成功。我曾多次尝试编辑 SQL 语句,但均未成功。当我在 phpMyAdmin 中运行相同的插入语句时,它起作用了。我真的不知道我的代码有什么问题。最令人沮丧的部分是没有错误。 mysqli_error($conn) 不返回任何内容。
以下代码是我一直在处理的:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<?php
$servername = "XXXXXXXXXXXXXXX";
$database = "RRRRRRRRRRRRR";
$username = "DDDDDDDD";
$password = "ZZZZZZ";
$data = json_decode(file_get_contents('php://input'), true);
$uid = $data["id"];
$firstname = $data["firstname"];
$lastname = $data["lastname"];
$email = $data["email"];
$password = $data["password"];
$activationCode = $data["activationCode"];
$conn = mysqli_connect($servername, $username, $password, $database);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}else{
echo "Connected successfully";
}
$sql = "INSERT INTO studentinfo (studentid, firstname, lastname, email, mypass, activationCode)
VALUES ('$uid', '$firstname', '$lastname', '$email', '$password', '$activationCode')";
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
print mysqli_error($conn);
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
</body>
</html>
以下是 echo $SQL 返回的内容:
INSERT INTO studentinfo (studentid, firstname, lastname, email, mypass, activationCode) VALUES ('androidid', 'wendu', 'Chao', 'eeeee@yahoo.com', 'xxxxxxxx', '0ecccvvjdkfkf')
【问题讨论】:
-
您的脚本对SQL Injection Attack 开放。即使是if you are escaping inputs, its not safe!,您也应该始终在
MYSQLI_或PDOAPI 中使用prepared parameterized statements,而不是将用户提供的值连接到查询中。永远不要相信任何用户输入! -
您正在存储纯文本密码V.Bad PHP 提供了
password_hash()和password_verify(),为了您的用户安全,请使用它们。 -
显示
$sql变量值。 -
很明显,
$uid,$firstname...etc 永远不会在脚本中的任何位置定义。很明显,它们没有任何价值,然后会搞砸您的查询(更是如此,因为您没有使用参数正确创建查询)。目前尚不清楚“没有成功”是否意味着它根本没有插入任何东西,或者它是否插入了包含空白值的行。明确说明您的代码在做什么/不做什么要好得多,而不是含糊地暗示一个问题。 -
有什么奇怪的,你为什么不解释你实际看到了什么?我的意思是,“没有成功”解释绝对没有关于你得到的实际结果。是不是说创建成功了?还是说错误?或者它可能根本没有显示任何东西?您必须始终牢记,我们不会坐在您的屏幕后面,您的答案取决于您描述问题的能力