INSERT 语句失败且没有任何错误消息

时间:2021-01-20 10:57:00

标签: php mysql mysqli

我正在尝试将值插入 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')

1 个答案:

答案 0 :(得分:0)

我注意到了一些事情。

'$uid', '$firstname', '$lastname', '$email', '$password', '$activationCode' 未在代码中设置。我假设他们来自外面,即 $_POST

您还会遇到包含由注入可能性引起的特殊字符的字符串的问题。每一个'都会破坏sql语句并且会导致问题。 最好使用绑定参数,而不是直接将值传递到语句中。

$sql = $conn->prepare("INSERT ...");
$sql->bind_param("is", $uid,$firstname);
$sql->execute();

密码没有经过哈希处理。最好不要在数据库中安全明文密码。

我认为如果您显示 sql echo $sql; 的值,它会告诉您语句的结构。您可以将其复制并粘贴到 PHPMyAdmin 中,然后查看该语句是否像您预期的那样工作。 $UID 似乎是一个整数值,但您将其作为字符串传入。

$sql = "INSERT INTO studentinfo (studentid, firstname, lastname, email, mypass, activationCode)
VALUES ($uid, '$firstname', '$lastname', '$email', '$password', '$activationCode')";