0

$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 マークに簡略化しようとしまし?たが、それでも機能しませんでした。

?マークは、準備されたステートメントのプレースホルダーです

4

1 に答える 1

3

問題はテーブルの列数ではなく、insertステートメントにタイプミスがあることです。「IP,Email,File」の代わりに「IP.Email.File」があるため、DB エンジンは、insert ステートメントで指定されたリテラルとは異なる数の列があると見なします。

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 (?,?,?,?,?,?,?,?,?,?,?,?,?)
于 2012-10-22T22:55:52.637 に答える