0

下面的代码运行没有错误,尽管它没有向我的数据库中插入任何内容:

<?php
$con=mysqli_connect("localhost","root","","teachme");
//check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

//add details in database
if (isset($_POST['user']) and isset($_POST['pass']) and isset($_POST['division'])) {
    $user = mysql_real_escape_string($_POST['user']);
    $pass = mysql_real_escape_string($_POST['pass']);
    $division = mysql_real_escape_string($_POST['division']);
    mysqli_query($con,"INSERT INTO users (username, password, division, id)
VALUES ($user, $pass, $division)");
    echo 'Succesfully added entries onto the database.. ';
    echo $user;
    echo $pass;
    echo $division;
    echo '<a href="../">Return to homepage</a>';
}
else {
    echo "An error occured, try again!";
}
?>

所有变量都正确传输,这就是我使用上面的 echo 语句的原因。我是新手,我知道这一定是一个非常愚蠢的问题。 数据库

4

4 回答 4

2
    mysqli_query($con,"INSERT INTO users (username, password, division, id)
VALUES ($user, $pass, $division)");

由于您当前的查询试图插入一列,您已经引用了 4 个列名,但包含了 3 个变量引用。

如果你有你的数据库

ID 的 Auto_increment,您的查询可以是:

    mysqli_query($con,"INSERT INTO users (username, password, division)
VALUES ($user, $pass, $division)");

如果不。您将需要创建一个每行更新的变量以填充id列引用。

mysqli_query($con,"INSERT INTO users (username, password, division, id)
VALUES ($user, $pass, $division, $ID_Placeholder)"); // This will not work without a reference. Take this as an example only 

只是为了测试这是问题所在,通过运行以下命令执行插入:

$ID_Placeholder = 4; // just a dummy test variable, to check the insert but also show you where you have went wrong. 
mysqli_query($con,"INSERT INTO users (username, password, division, id)
VALUES ($user, $pass, $division, $ID_Placeholder)");
于 2013-03-27T23:52:08.183 回答
0
mysqli_query($con,"INSERT INTO users (username, password, division, id)
VALUES ($user, $pass, $division)");

您的列数不匹配。您正在尝试用 3 个值填充 5 列。只需在 value 子句中设置“null”或删除不必要的“destination”列。

于 2013-03-27T23:53:00.840 回答
0

除了INSERT语句中的字段数与如上所述提供的值数不匹配之外,我相信您也需要引用这些值,如下所示:

mysqli_query($con,"INSERT INTO users (username, password, division)
VALUES ('$user', '$pass', '$division')");

mysql_real_escape_string将处理变量本身中单引号的转义,但不会为您引用它们。

此外,请检查以下内容:

  1. mysqli_query将根据 INSERT 是否成功返回 TRUE 或 FALSE;如果它返回 FALSE,请致电mysqli_error以了解发生了什么。
  2. 考虑用准备好的语句替换此代码;有关信息和示例,请参见此处
于 2013-03-28T00:01:27.507 回答
0
  1. mysql_real_escape_string - 不要使用它。

    如果未指定链接标识符,则假定由 mysql_connect() 打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个,就好像 mysql_connect() 没有参数被调用一样。根本不要使用 mysql_*。

  2. 不要使用转义。使用准备好的语句

  3. 检查使用函数的文档(mysqli_query)。

  4. Mysql 错误不是 PHP 错误。如果您想查看 MySQL 错误,请使用mysqli_error

于 2013-03-28T00:24:28.750 回答