Я пытаюсь заполнить таблицу MySQL некоторыми данными, но mysqli не позволяет мне вставлять каждый 10-й оператор - PullRequest
0 голосов
/ 14 марта 2010

Я хочу инициализировать таблицу 'ticket' с некоторыми идентификаторами билетов. Для этого я хочу вставить 120 идентификаторов билетов в таблицу. Однако при каждом 10-м утверждении MySQL сообщает мне, что идентификатор уже существует, и поэтому не позволяет мне его вставить. Вот мой код:

    //make a query
    $insert_ticket_query = "INSERT INTO ticket (id) VALUES (?)";
    $insert_ticket_stmt = $mysqli->stmt_init();
    $insert_ticket_stmt->prepare($insert_ticket_query);
    $insert_ticket_stmt->bind_param('s', $ticket_id);

    $mysqli->autocommit(FALSE); //start transaction
    for($i=0;$i<NO_GUESTS;$i++){
        $id = generate_id($i);
        $ticket_id = format_id($id, $prefix['ticket'], $suffix['ticket']);
        $t_id = $ticket_id;
        //echo '<p>'.$ticket_id.'</p>';
        $result = $mysqli->query("SELECT * FROM ticket WHERE id='".$ticket_id."'");
        $row_count = $result->num_rows;
        if($row_count == 0){
            $result->close();
            if($insert_ticket_stmt->execute()){
                $mysqli->commit();
                echo "<p>".$t_id."added to the ticket table!</p>";
            }
            else{
                $mysqli->rollback();
                echo "problem inserting'".$t_id."' to the ticket table";
            }
        }
        else{
            echo "<p>".$t_id."already exists, so not adding it!</p>";
            $result->close();
        }
    }

    $mysqli->autocommit(TRUE);
    $insert_ticket_stmt->close();
    ?>

Вот функции, используемые в коде:

        function generate_id($integer){
        //generate an ID based on the $string parameter
        //$id = "000000000000XZLH";
        $string = (string) $integer;
        $length = strlen($string);
        $id_string = "10000000";

        for($i=0;$i<$length;$i++)
            $id_string[$i] = $string{$i};

        return $id_string;
        }

        function format_id($id_string, $id_prefix, $id_suffix){

            $id = "0000000000000000";

            //apply the prefix
            for($i=0;$i<4;$i++)
                $id[$i] = $id_prefix{$i};

            //apply the id
            for($i=4,$j=0;$j<8;$i++,$j++)
                $id[$i] = $id_string{$j};

                //apply the suffix
            for($i=12,$j=0;$j<4;$i++,$j++)
                $id[$i] = $id_suffix{$j};

            return $id;
        }

Вот журнал, который возвращается в браузер:

TCKT00000000YDLДобавлено в таблицу заявок!

TCKT10000000YDLДобавлено в таблицу заявок!

TCKT20000000YDLДобавлено в таблицу заявок!

TCKT30000000YDLДобавлено в таблицу заявок!

TCKT40000000YDLДобавлено в таблицу заявок!

TCKT50000000YDLДобавлено в таблицу заявок!

TCKT60000000YDLДобавлено в таблицу заявок!

TCKT70000000YDLДобавлено в таблицу заявок!

TCKT80000000YDLДобавлено в таблицу заявок!

TCKT90000000YDLДобавлено в таблицу заявок!

TCKT10000000YDLOu уже существует, поэтому не добавляйте его!

TCKT11000000YDLДобавлено в таблицу заявок!

TCKT12000000YDLДобавлено в таблицу заявок!

TCKT13000000YDLДобавлено в таблицу заявок!

TCKT14000000YDLДобавлено в таблицу заявок!

TCKT15000000YDLДобавлено в таблицу заявок!

TCKT16000000YDLДобавлено в таблицу заявок!

TCKT17000000YDLДобавлено в таблицу заявок!

TCKT18000000YDLДобавлено в таблицу заявок!

TCKT19000000YDLДобавлено в таблицу заявок!

TCKT20000000YDLOu уже существует, поэтому не добавляйте его!

Ответы [ 3 ]

1 голос
/ 14 марта 2010

Если вам все равно, какой идентификатор получает билет, вы должны использовать поле «автоинкремент» в mysql, чтобы mysql назначил вам уникальный идентификатор.

1 голос
/ 14 марта 2010

Это потому, что вы выравниваете цифры по левому краю. Взглянуть. Это действительно идентично. 1 дополняется вправо до ширины 10 с нулями, идентично 10 дополняется вправо до ширины 10.

0 голосов
/ 14 марта 2010

Перепроверьте функции generate_id () и format_id (), возможно, есть что-то, что генерирует одинаковые идентификаторы!

...