これは私のコードの断片です:
$ftype = "HF Custom";
$stype = "Custom";
$mysqli->autocommit(FALSE);
for($j = 1; $j < $columns; $j++){
$fname = $pdata[0][$j];
$startID++;
echo "id: ".$startID. "\n";
if($isExist[$j] <> 1){
// insert new admin record
$sql = "INSERT INTO `admin_custom` (`Fund_ID`, `user_id`, `Fund_Name`,`Fund_Type`,`Fund_Strategy_Classif_1`) VALUES (?,?,?,?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('iisss',$startID ,$user_id, $fname, $ftype, $stype);
$stmt->execute();
$stmt->close();
}
.......
}
$mysqli->commit();
問題は、admin-custom テーブルのレコードを確認すると、ループに入る前にすべての Fund_ID フィールドが$startID と同じであるということです。他のすべてのフィールドは正しく、$pdata 配列に従って変更されます。
$startID をエコーすると、正しいインクリメントされた値が表示され、ループに入る前に割り当てられた値が 1 つだけバインドされます。
ここで何が問題なのですか?
更新!!!。Fund_ID フィールドを varchar(64) に変更し、bind_param のタイプを「string」に変更しました。正しい文字列を書き込むようになりました。そのため、int(11) は ID を表すのに十分ではないようです --- bigint に変更する必要があります。