2014-02-14 121 views
-2

有谁能告诉我我在这里做错了吗?这让我疯狂!查询没有将数据插入到数据库中?

$mysqli = new mysqli("localhost", "user", "pass", "admin_responsivecontact"); 


    if ($mysqli->connect_errno) { 
     die('Error: Could not connect to database'); 
    } 
    else {echo "success";} 
    $sql = 'INSERT INTO contact (id,name,company,job,email,tel,info,guide,add,date) VALUES (1,'.$_POST['name'].'", "'.$_POST['name'].'", "'.$_POST['name'].'", "'.$_POST['name'].'", "'.$_POST['name'].'", "'.$_POST['name'].'", "'.$_POST['name'].'", "'.$_POST['name'].'", "'.$_POST['name'].'")'; 


    $result = $mysqli->query($sql); 

    $mysqli->close(); 
+4

张贴您的错误和神的爱请不要使用这样的代码。添加POST参数到你的sql字符串将打开你sql注入。备选:准备好的语句(https://php.net/manual/de/mysqli.quickstart.prepared-statements.php)。 – roman

+0

错了?那么,你检查连接错误,但假设所有查询都能正常工作。不确定你的意思。 –

回答

1

add是MySQL中的reserved word。用反引号括起来!

你应该做的像

'INSERT INTO contact (`id`,`name`,`company`,`job`,`email`,`tel`,`info`,`guide`,`add`,`date`) 
                   //Like this   ^---^ 
+1

谢谢!我改变了列名,它完美的工作! –

0

在上面的代码中的许多问题:

1)容易注射,无消毒进行。
2)重用相同的POST变量,而不是将其存储在工人变量中,然后应该对其进行消毒。
3)使用MySQL关键字作为没有反引号的字段名称。
4)不能转义输入。所以如果有人用撇号输入名字,就会出现错误。还涉及1)。
5)你有一个叫做“id”的字段。它们通常是自动增量的,所以你不能只将它赋值为“1”并且完成它。一种解决方案是只是省略它,让MySQL填写正确的当前计数器值。
6)显然你有一个叫做“日期”的字段,所以它可能是一个输入字段。然而,你似乎把它分配给你分配给其他领域的同一个字符串。