PHP mysql在向表中添加数据时遇到麻烦

时间:2013-04-06 14:52:41

标签: php mysql database insert mysqli

我在php上相当新,我一直在尝试将一系列变量插入到mysql数据库中。但是,似乎在创建表时,数据不会进入表中。我希望有人能告诉我原因。任何帮助将不胜感激。

php代码:

<?php
$team = $_POST['team'];
$int1 = $_POST['int1'];
$int2 = $_POST['int2'];
$int3 = $_POST['int3'];
$int4 = $_POST['int4'];
$int5 = $_POST['int5'];
$int6 = $_POST['int6'];
$int7 = $_POST['int7'];
$int8 = $_POST['int8'];
$int9 = $_POST['int9'];
$int10 = $_POST['int10'];
$int11 = $_POST['int11'];
$int12 = $_POST['int12'];
$int13 = $_POST['int13'];
$int14 = $_POST['int14'];
$con=mysqli_connect("127.0.0.1:3306","root","password","my_db");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
$sqli="CREATE TABLE $team(int1 INT,int2 INT,int3 INT,int4 INT,int5 INT,int6 INT,int7 INT,int8 INT,int9 INT,int10 INT,int11 INT,int12 INT,int13 INT,int14 INT)";
if (mysqli_query($con,$sqli))
  {
  echo "<br />Table created successfully";
  }
else
  {
  echo "<br />Error creating table: " . mysqli_error();
  }
$sql="INSERT INTO $team (int1, int2 ,int3 ,int4 ,int5 ,int6 ,int7 ,int8 ,int9 ,int10 ,int11 ,int12 ,int13 ,int14 )
VALUES ($int1,$int2,$int3,$int4,$int5,$int6,$int7,$int8,$int9,$int10,$int11,$int12,$int13,$int14)";
if (mysqli_query($con,$sql))
  {
  echo "<br />Record added";
  }
else
  {
  echo "<br />Error adding record";
  }
?>

2 个答案:

答案 0 :(得分:0)

首先,您不应该直接将$ _POST值插入数据库,而不使用strip_tags,htmlentities或其他一些函数来摆脱可能的恶意代码。

其次,我建议查看MySQL文档以获取创建表的正确语法。 http://dev.mysql.com/doc/refman/5.1/en/create-table.html

答案 1 :(得分:0)

首先,在没有清理(验证)的情况下插入数据会带来很大的安全风险。

其次,在php中使用mysqli_error http://php.net/manual/en/mysqli.error.php来记录或打印错误。

因为您在没有验证的情况下插入数据,如果$int1.... $int14中的任何变量为空或未从请求脚本的表单中填充,则您的SQL查询会变得不正确并因生成某种语法错误而失败,可以使用如上所述的mysqli_error进行跟踪。

if (mysqli_query($con,$sql))
  {
  echo "<br />Record added";
  }
else
  {
  echo "<br />Error ".mysqli_error($con);
  }

看看当任何一个字段留空时可能会出现什么问题,请考虑一下 提交的值为:     $ team ='tbl_team';     $ int1 = 1;     $ int2 = 2;     $ int3 = 3;     $ int4 = 4;     $ int5 ='';     $ int6 = 6;     $ int7 = 7;     $ int8 = 8;     $ int9 = 9;     $ int10 ='';     $ int11 = 11;     $ int12 = 12;     $ int13 = 13;     $ int14 = 14;

现在看看你的sql查询会发生什么,如果我们在这种情况下打印它:

$sql="INSERT INTO $team 
                 (int1, int2 ,int3 ,int4 ,int5 ,int6 ,int7 ,
                   int8 ,int9 ,int10 ,int11 ,int12 ,int13 ,int14 )
      VALUES                        
                   ($int1,$int2,$int3,$int4,$int5,$int6,$int7,
                   $int8,$int9,$int10,$int11,$int12,$int13,$int14)";
print $sql

将导致:

  INSERT INTO tbl_team (int1, int2 ,int3 ,int4 ,int5 ,int6 ,int7 ,int8 ,int9 ,int10 ,int11 ,int12 ,int13 ,int14 )VALUES (1,2,3,4,,6,7,8,9,,11,12,13,14)";

这是一种SQL语法问题。

如果你完全是一个新手并且还没有理解一个单词,你可以尝试使用以下代码行作为你原版中的替换,以便有更好的机会。

$sql="INSERT INTO $team (int1, int2 ,int3 ,int4 ,int5 ,int6 ,int7 ,
                          int8 ,int9 ,int10 ,int11 ,int12 ,int13 ,int14 )
      VALUES
                        ('$int1','$int2','$int3','$int4','$int5','$int6','$int7',
                         '$int8','$int9','$int10','$int11','$int12','$int13','$int14')";