下面的代码运行时没有错误,尽管它没有在我的数据库中插入任何内容:
<?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语句的原因。
我是新人,我知道这一定是一个非常愚蠢的问题。
答案 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
将处理变量本身中单引号的转义,但它不会为您引用它们。
另外,请检查以下内容:
mysqli_query
将返回TRUE或FALSE,具体取决于INSERT是否成功;如果返回FALSE,请调用mysqli_error
以查明发生的情况。答案 3 :(得分:0)
mysql_real_escape_string - 请勿使用它。
如果未指定链接标识符,则假定mysql_connect()打开的最后一个链接。如果没有找到这样的链接,它将尝试创建一个,就好像没有参数调用mysql_connect()一样。 根本不要使用mysql_ *。
不要使用转义。使用prepared statements。
检查使用函数的文档(mysqli_query)。
Mysql错误不是PHP错误。如果您想查看MySQL错误,请使用mysqli_error。