【发布时间】:2018-09-19 13:36:41
【问题描述】:
我使用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);
【问题讨论】:
-
将它们分成 2 个单独的查询。您可以使用
mysqli_insert_id获取刚刚创建的 ID,然后在第二个插入语句中使用它 - php.net/manual/en/… -
除了@waterloomatt 所说的:我建议在整个过程中使用事务,因此您要么拥有所有数据,要么一无所有,而不是可能会中断的半现有用户当您尝试在代码中使用他时。
-
警告: 不要使用
md5()进行密码散列。它很旧,超快(在密码散列方面很糟糕)并且损坏(发生了散列冲突)。请改用 PHP 的password_hash()和password_verify()。 -
您还应该考虑使用准备好的语句,而不是像那样手动构建查询。我不知道您是否先转义数据,但是在使用多查询时考虑安全性尤为重要。
-
您有两个选择:1.) 根据手册使用 PHP 函数
mysqli_insert_id()。 2.) 通过使用 SQL 函数LAST_INSERT_ID():INSERT INTO esc_usuarios_fotos (...) VALUES ('null', LAST_INSERT_ID());使用本机 (My)SQL 方法
标签: php sql mysqli-multi-query