如何将值插入同一字符串中不同 table 的 auto_increment
How to insert a value into an auto_increment of a different table in the same string
我正在使用 mysqli_multi_query
插入用户信息和默认的空个人资料照片,有两个 table 用于个人数据,"esc_usuarios"
用于个人数据,"esc_usuarios_fotos"
的照片。
我想要的是,在插入个人数据后,将这个空图像插入"esc_usuarios_fotos"
table绑定"img_usu_codigo"
与这个插入的人,这个人的id是自动的在 "usu_codigo"
列中从 table "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
...
}
我正在使用 mysqli_multi_query
插入用户信息和默认的空个人资料照片,有两个 table 用于个人数据,"esc_usuarios"
用于个人数据,"esc_usuarios_fotos"
的照片。
我想要的是,在插入个人数据后,将这个空图像插入"esc_usuarios_fotos"
table绑定"img_usu_codigo"
与这个插入的人,这个人的id是自动的在 "usu_codigo"
列中从 table "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
...
}