-1

これは私のコードの断片です:

    $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 に変更する必要があります。

4

1 に答える 1