[英]How to insert a value into an auto_increment of a different table in the same string
我正在使用mysqli_multi_query
插入用戶信息和默認的空個人資料照片,為此有兩個表, "esc_usuarios"
用於個人數據, "esc_usuarios_fotos"
用於照片。
我想要什么,在插入的個人資料后,插入這個空圖像中的"esc_usuarios_fotos"
表結合"img_usu_codigo"
這個插入的人,這個人的ID被自動遞增列"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);
在這里解決一些問題。 出於安全原因,您確實應該使用參數化插入。 分割出您的插入內容,然后使用insert_id
從您的人員插入物中獲取新創建的ID。 像注釋中的其他指出的那樣包裝事務中的所有內容-這將確保您獲得所有內容或一無所獲。
最后,使用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
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.