使用null将动态数组插入MySQL数据库

时间:2014-08-10 00:12:58

标签: php mysql sql phpmyadmin

我试图多次插入一个可以在其中包含3到6个int的数组。

我创建了这个来解决问题:

CREATE TABLE name(
    ID INT AUTO_INCREMENT NOT NULL,
    NUM1 INT NOT NULL,
    NUM2 INT NOT NULL,
    NUM3 INT NOT NULL,
    NUM4 INT,
    NUM5 INT,
    NUM6 INT,
    PRIMARY KEY(ID)
)DEFAULT CHARSET = latin1;

最重要的是,我创建了以下代码,以便我可以插入数据。它接收$num - 一个int,它告诉我们有多少个数字不是NULL,而是一个带有整数的数组。

 function inserDataBase($num,$array)
       {

            $x = array();
            $x[0] = NULL;
            $x[1] = NULL;
            $x[2] = NULL;
            $x[3] = NULL;
            $x[4] = NULL;
            $x[5] = NULL;

            for($i=0;$i<$num;$i++){
                $x[$i] = $array[$i];
            }   

            //connetion to the Server       
            $username = "root";
            $password = "";
            $hostname = "localhost"; 
            $database = "tournament";

            $dbhandle = mysql_connect($hostname, $username, $password) 
            or die("Unable to connect to MySQL");

            $conn = mysql_select_db($database)
            or die("Unable to connect to the selected database");

            $sql = "INSERT INTO 'name' VALUES ($x[0], '$x[1]', '$x[2]', '$x[3]', '$x[4]', '$x[5]')";    

        mysql_query($sql,$dbhandle)
        or die(mysql_error());

        mysql_close($dbhandle);

        }

我遇到的问题:

  • 我根本无法插入它们。我搜索了一下,我现在知道SQL并不理解变量,我需要将其更改为其他内容,但我担心如果我将它们传递给int并且NULL会给我带来一些麻烦。
  • 这是一个内部数据库,我的意思是它只是要插入的随机数字。我应该担心SQL注入还是没有?
  • 这是一个辅助功能,所以我想知道最好是启动连接并在最后关闭它,或者每次插入数据时都创建一个连接。

2 个答案:

答案 0 :(得分:1)

通过在插入的值周围加上单引号,您可以将它们更改为字符串 - 这样您就不会插入记录。

编辑:此外,在MySQL中,您不要在列名称周围添加单引号,而是使用反引号`字符。我已经更新了除了初始SQL以外的所有SQL以显示它。

如果将PHP代码中的变量更改为$x[0] = 'NULL';,则可以使用以下内容将空值插入到列中:

$sql = "INSERT INTO 'name' VALUES ($x[0], $x[1], $x[2], $x[3], $x[4], $x[5])";

您最初使用的代码正在解析如下:

INSERT INTO `name` VALUES (1, 2, 3, '', '', '')

现在,变量最初被设置为字符串,SQL将被解析为:

INSERT INTO `name` VALUES (1, 2, 3, null, null, null)

编辑:话虽如此,我确实认为其中一条评论是正确的,你不能解析字符串中的数组,所以你的代码需要看起来像:

$sql = "INSERT INTO `name` VALUES (".$x[0].", ".$x[1].", ".$x[2].", ".$x[3].", ".$x[4].", ".$x[5].")";

答案 1 :(得分:0)

此代码有效。具有上述所有修改,还包括一个创建sql查询的循环。

$array = array(1,2,3);
$num = count($array);
inserDataBase($num,$array);

function inserDataBase($num,$array)
       {

            for($i=0;$i<$num;$i++){
                if $x[$i] = $array[$i];
            }
            for($i=$num;$num<=5;$i++){
                if $x[$i] = NULL;
            }

            //connetion to the Server       
            $username = "root";
            $password = "";
            $hostname = "localhost"; 
            $database = "tournament";

            $dbhandle = mysqli_connect($hostname, $username, $password) or die("Unable to connect to MySQL");

            $conn = mysqli_select_db($dbhandle,$database) or die("Unable to connect to the selected database");

            $sql = "INSERT INTO name VALUES (''";
            $count = 0;
            $values = '';
            for($count=0;$count<=5;$count++){
              $values .= ",".$x[$count];
            }
            $sql .= $values . ")"; 
            echo $sql;
            mysqli_query($dbhandle,$sql) or die(mysql_error());
            mysqli_close($dbhandle);
}