我试图多次插入一个数组,其中可以包含 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/