插入到不插入

时间:2013-03-27 23:48:45

标签: php mysql mysqli

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

<?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语句的原因。 我是新人,我知道这一定是一个非常愚蠢的问题。 Database

4 个答案:

答案 0 :(得分: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)");

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

另外,请检查以下内容:

  1. mysqli_query将返回TRUE或FALSE,具体取决于INSERT是否成功;如果返回FALSE,请调用mysqli_error以查明发生的情况。
  2. 查看用准备好的语句替换此代码;有关信息和示例,请参阅here

答案 3 :(得分:0)

  1. mysql_real_escape_string - 请勿使用它。

      

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

  2. 不要使用转义。使用prepared statements

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

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

相关问题