Как вставить значение в auto_increment другой таблицы в той же строке - PullRequest
0 голосов
/ 19 сентября 2018

Я использую mysqli_multi_query для вставки информации пользователя и фотографию профиля по умолчанию, для этого есть две таблицы, "esc_usuarios" для личных данных и "esc_usuarios_fotos" для фотографий.

Что мне нужно, чтобы после вставки личных данных вставить это нулевое изображение в "esc_usuarios_fotos" связывание таблицы "img_usu_codigo" с этим вставленным человеком, идентификатор человека автоматически увеличивается в столбце "usu_codigo"из таблицы "esc_usuarios".

Запрос:

<?php
$inserir_usuario = "INSERT INTO `esc_usuarios` 
    (
        usu_nome, 
        usu_senha, 
        usu_sobrenome, 
        usu_cpf, 
        usu_rg, 
        usu_nasc, 
        usu_endereco, 
        usu_numero, 
        usu_bairro, 
        usu_cep, 
        usu_cidade, 
        usu_uf, 
        usu_tel, 
        usu_cel, 
        usu_genero, 
        usu_email, 
        usu_indicador_codigo, 
        usu_datacadastro
    ) VALUES (
        '$nome', 
        '".md5('$password')."', 
        '$sobrenome', 
        '$cpf', 
        '$rg', 
        '$nascimento', 
        '$endereco', 
        '$numero', 
        '$bairro', 
        '$cep', 
        '$cidade', 
        '$uf', 
        '$tel', 
        '$cel',
        '$genero', 
        '$email', 
        '" . $_SESSION['codigo'] . "', 
        '$trn_date'
    );
    INSERT INTO esc_usuarios_fotos(img_local,img_usu_codigo) VALUES ('null', //i want to insert here the inserted person's id  "usu_codigo" of the first insert statement)";

$re = mysqli_multi_query($conexao, $inserir_usuario);

1 Ответ

0 голосов
/ 19 сентября 2018

Решение нескольких вопросов здесь.Вы действительно должны использовать параметризованные вставки из соображений безопасности.Разделите вставки, а затем используйте insert_id, чтобы получить вновь созданный идентификатор из вашей вставки person .Оберните все в транзакции, как отмечали другие в комментариях - это гарантирует, что вы получите все или ничего.

И, наконец, используйте mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);, чтобы превратить ошибки MySQL в исключения PHP.Затем вы можете обернуть все в try/catch блок.Удачи!

Псевдо-код:

// Turn MySQL errors into PHP exceptions.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

try {
    // Open connection
    $connection = new mysqli(...);

    // check connection 
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    // Start transaction here 
    ...

    /***********************************/
    /********** PERSON INSERT **********/
    /***********************************/
    if ($stmt = $connection->prepare("INSERT INTO `esc_usuarios` ... (?, ?, ...)")) {

        /* bind parameters for markers */
        $stmt->bind_param("s", $...);
        ...

        /* execute first query */
        $stmt->execute();

        /* This is the newly created ID */
        $id = $connection->insert_id

        /***********************************/
        /********** PHOTOS INSERT **********/
        /***********************************/
        if ($stmt = $connection->prepare("INSERT INTO `esc_usuarios_fotos` ... (?, ?)")) {

            /* Use that newly created ID here along with other params for your query */
            $stmt->bind_param("s", $id);

            /* execute query */
            $stmt->execute();
        }
    }

    // Commit transaction here
    ...
}
catch ( Exception $e ) {
    // Rollback transaction if the exception is DB related
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...