【问题标题】:INSERT statement fails without any error message [duplicate]INSERT 语句失败,没有任何错误消息[重复]
【发布时间】: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_PDO API 中使用prepared parameterized statements,而不是将用户提供的值连接到查询中。永远不要相信任何用户输入!
  • 您正在存储纯文本密码V.Bad PHP 提供了password_hash()password_verify(),为了您的用户安全,请使用它们。
  • 显示$sql变量值。
  • 很明显,$uid, $firstname ...etc 永远不会在脚本中的任何位置定义。很明显,它们没有任何价值,然后会搞砸您的查询(更是如此,因为您没有使用参数正确创建查询)。目前尚不清楚“没有成功”是否意味着它根本没有插入任何东西,或者它是否插入了包含空白值的行。明确说明您的代码在做什么/不做什么要好得多,而不是含糊地暗示一个问题。
  • 有什么奇怪的,你为什么不解释你实际看到了什么?我的意思是,“没有成功”解释绝对没有关于你得到的实际结果。是不是说创建成功了?还是说错误?或者它可能根本没有显示任何东西?您必须始终牢记,我们不会坐在您的屏幕后面,您的答案取决于您描述问题的能力

标签: php mysql mysqli


【解决方案1】:

我注意到了一些事情。

代码中未设置值'$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')";

【讨论】:

  • 如果还是不行,请传入生成的$sql,以便我们进一步分析
  • 小注在引号中传递整数值是非常有效的,尽管在 SQL 注入方面很危险
  • 谢谢,我编辑我的帖子
  • 感谢您的帮助,我已经编辑了原始问题以反映 echo $sql 的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多