数据未插入数据库

时间:2013-12-23 07:45:17

标签: php mysql

我想将html表单中的数据添加到数据库中,这是我的代码

<html><?php

$var1=$_POST[tag];
$var2=$_POST[name];
$var3=$_POST[surname];

echo $var1;
echo $var2;
echo $var3;

$dbhandle=mysql_connect('localhost','root','mysql')
or die ("Unable to connect to database");
 mysql_select_db("arduino");

mysql_query("INSERT INTO door('Tag','Name','Surname') VALUES('$var1','$var2','$var3')");
?>
</html>

但是,没有数据进入数据库,我已经放置了echo语句,以便显示表单中的数据被接收并且一切正常,但是当我打开数据库时,

  

从门中选择*

返回空集。

3 个答案:

答案 0 :(得分:4)

您的column名称附近有引号,因此请删除

//Tag,Name,Surname

mysql_query("INSERT INTO door(Tag,Name,Surname) VALUES('$var1','$var2','$var3')");

                          ---^----^---^------^---
  

注意:您的代码很容易受到SQL注入攻击,mysql_() API现在已被弃用,因为&gt; PHP 5.5.0,请考虑使用mysqli_()PDO

阅读php.net

上的大红框

enter image description here


在这种情况下,您应始终使用错误报告,因此,如果您不打算使用其他API,请使用echo mysql_error($connection);,这将为您提供用户友好的错误消息。

答案 1 :(得分:2)

从查询中的列名中删除单引号'

mysql_query("INSERT INTO door(Tag,Name,Surname) VALUES('$var1','$var2','$var3')");

如果你的目的是逃避列名,那么mysql的转义字符会回到'''。只有当列名或表名是reserved words之一时才需要它们。

答案 2 :(得分:0)

首先,我不建议您使用mysql而是使用PDO或MySQLi。并且您的代码完全容易受到sql注入等攻击,并且您的数据库可以轻松入侵。使用PDO预处理语句,您可以像使用

一样使用它
$pdoCon = new PDO('mysql:host=localhost;dbname=mydb', 'root', 'abc');
$stmt = $pdoCon->prepare("INSERT INTO door(Tag,Name,Surname) VALUES(?,?,?)");
$stmt->bindParam(1, $var1, PDO::PARAM_INT);
$stmt->bindParam(2, $var2, PDO::PARAM_STR, 20);
$stmt->bindParam(3, $var3, PDO::PARAM_STR, 20);
$stmt->execute();

它是完全安全的,并且更好地使用和下注它将像魅力一样工作,没有sql注入攻击或任何其他。有关详细信息,请阅读http://www.php.net/pdo.prepared-statements