问题: 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查询值开始,然后让用户填写其余部分,因为他可以找到时间。
提前谢谢。