2013-03-27 112 views
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语句。 我是新来的,我知道这肯定是一个非常愚蠢的问题。 Database

+0

你确定查询甚至可以运行吗?你确定错误报告是和? – 2013-03-27 23:50:51

+0

已启用。尝试所有建议后,数据库仍为空。 – Tom 2013-03-28 00:03:03

+0

粘贴回显的查询。 – zad 2013-03-28 00:04:20

回答

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

作为当前的查询正试图插入一列,你已引用4个名,但包括3个变量的引用。

如果你有你的数据库

AUTO_INCREMENT的ID,你的查询可以是:

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)"); 
+0

不。数据库仍为空。报告错误。 – Tom 2013-03-28 00:01:46

+0

您是否运行了我的最新更新? – 2013-03-28 00:02:35

+0

数据库仍为空。 – Tom 2013-03-28 00:04:52

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

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

0

除了事实,那就是在INSERT声明字段的数量和上面提到的供应值的数量之间的不匹配,我相信你需要引用值过,像这样:

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

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

此外,检查以下内容:

  1. mysqli_query将返回TRUE或FALSE,这取决于刀片是否成功;如果它返回FALSE,请致电mysqli_error了解发生了什么事。
  2. 研究用准备好的语句替换此代码;有关信息和示例,请参阅here
0
  1. mysql_real_escape_string - 不使用它。

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

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

  3. 检查使用功能的文档(mysqli_query)。

  4. Mysql错误不是PHP错误。如果你想看到MySQL错误使用mysqli_error

+0

我的错误消息:错误消息:'字段列表'中的未知列'test' – Tom 2013-03-28 00:49:44

+0

@Tom,请回显生成的查询。我不知道你在$ _POST中有什么。 – sectus 2013-03-28 00:54:16

+0

我在$ user'test'中测试'',在$ pass中测试'test123',在$师中测试'junior' – Tom 2013-03-28 00:58:34