INSERT值的数量必须与使用预准备语句的表列数完全相等

时间:2016-10-24 01:04:10

标签: php mysql mysqli

问题: mysqli db表中的列数(不包括自动增量列)是否必须与准备好的语句的INSERT查询中的值完全匹配?

我有一个包含三列的mysql表。

CREATE TABLE IF NOT EXISTS `secure_user_data` (
`user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(32) NOT NULL,
`last_name` varchar(32) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

使用带有两个值first_name和last_name的预准备语句的INSERT查询效果很好。

/* This works fine with the above table. */
if ($stmt = $mysqli->prepare("INSERT INTO secure_user_data (first_name, last_name) VALUES (?,?)")) {
$stmt->bind_param('ss', $first_name, $last_name);
}
$stmt->execute();

但是,如果我在表中创建一个新列user_name,则上面的INSERT查询不会插入记录。

CREATE TABLE IF NOT EXISTS `secure_user_data` (
`user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(32) NOT NULL,
`last_name` varchar(32) NOT NULL,
`user_name` varchar(32) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

如果我将第3个值user_name添加到INSERT查询中,它将在上面的表中插入一条记录。

/* This works with auto-increment column plus the three more columns. */
if ($stmt = $mysqli->prepare("INSERT INTO secure_user_data (first_name, last_name, user_name) VALUES (?,?,?)")) {
$stmt->bind_param('sss', $first_name, $last_name $user_name);
}
$stmt->execute();

我的表最终可能会有二十或三十列。我试图弄清楚如何从最小数量的INSERT查询值开始,然后让用户填写其余部分,因为他可以找到时间。

提前谢谢。

0 个答案:

没有答案