php - 使用空值将动态数组插入到 MySQL 数据库中

标签 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 和一个包含 int 的数组。

 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 注入(inject)?
  • 这是一个辅助功能,所以我想知道是启动连接并在最后关闭它还是每次插入数据时都创建一个连接更好。

最佳答案

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

编辑:此外,在 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].")";

关于php - 使用空值将动态数组插入到 MySQL 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25224328/

相关文章:

php - 如何使用触发器在 SQL 中递增?

php - 在这种简单的情况下,PHP 拒绝接受返回类型的原因是什么?

mysql - SQL:使用 LIKE,如果搜索匹配该行中的任何值,则返回该行

sql - 从字符串中计算出的 id 作为数据库键

php - 为每个不同的字段值选择随机行?

php - MYSQL ORDER BY 子句不起作用

MySQL 在 Mac 上无法启动,即使它是使用 Brew 安装的

sql - Postgres 中的 Group by 子句中的多个不需要的记录

MYSQL - 创建 View 查询两个相似的表

php - 如何在 silverstripe 3 模板中按日期对外部 API json 数据进行分组?