mysqli准备的问题

时间:2012-10-22 22:53:43

标签: php mysql database mysqli syntax-error

我遇到$mysqli->prepare的问题,代码如下:

if (!($stmt = $mysqli->prepare("INSERT INTO `Orders` (OrderID,IP.Email.File,Cat,Price,Discount,Size,Scaleby,Emailed,Downloaded,Payment,DateTime) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)"))) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}

当前代码:

if (!($stmt = $mysqli->prepare("INSERT INTO `Orders` (OrderID,IP,Email,File,Cat,Price,Discount,Size,Scaleby,Emailed,Downloaded,Payment,DateTime) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"))) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}

错误讯息:

  

准备失败:(1136)列数与第1行的值计数不匹配

用于制作表格的代码:

if ($mysqli->query('CREATE TABLE IF NOT EXISTS `Orders` (
ID BIGINT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(ID),
OrderID CHAR(40),
IP CHAR(40),
Email VARCHAR(254),
File VARCHAR(30),
Cat VARCHAR(30),
Price DEC(5,2),
Discount DEC(3,2),
Size VARCHAR(30),
Scaleby DEC(3,2),
Emailed BOOL,
Downloaded BOOL,
Payment VARCHAR(30),
DateTime DATETIME)') === False){
printf("Error: %s\n", $mysqli->error);
}

我已经尝试从(...)删除INSERT INTO...以尝试修复错误,但这不起作用。 我也尝试将其简化为3 ?分,但仍无效。

?标记是预先准备好的声明中的占位符

1 个答案:

答案 0 :(得分:3)

问题不在于表格中的列数,而是insert语句中存在拼写错误。您有“IP.Email.File”而不是“IP,Email,File”,因此数据库引擎认为您的列数与插入语句中指定的文字数不同。

INSERT INTO `Orders`

-- 11 columns here, because "IP.Email.File" parses as one column
(OrderID,IP.Email.File,Cat,Price,Discount,Size,Scaleby,Emailed,Downloaded,Payment,DateTime) 

-- 13 values here
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)