2012-10-22 127 views
0

我有問題與$mysqli->prepare用下面的代碼:問題與mysqli的準備

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 ?馬克,但它仍然沒有工作。

?馬克在一份聲明中

+3

您用字點而不是逗號分隔字段名稱'IP','Email'和'File'。 – eggyal

+1

如果您**閱讀**錯誤消息「列計數與第1行的值計數不匹配」 - 那麼您會明白它的含義。 – zerkms

+0

@zerkms大聲笑,我做了,但它很神祕。 – linuxrules94

回答

3

的問題是沒有在表中的列數的佔位符,它是有一個在insert聲明一個錯字。您有「IP.Email.File」而不是「IP,電子郵件,文件」,因此數據庫引擎認爲您的列數與插入語句中指定的字符數不同。

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 (?,?,?,?,?,?,?,?,?,?,?,?,?) 
+0

這是問題的一半,但它仍然不起作用 '準備失敗:(1136)列計數與第1行的值計數不匹配 – linuxrules94

+0

@ linuxrules94如果計數真的是相同的,我不會真的知道還有什麼可能。你可以添加你的問題併發布你現在使用的代碼嗎? – McGarnagle

+0

我做了你所說的。 – linuxrules94