【发布时间】:2015-03-14 15:04:36
【问题描述】:
我的桌子是这样的
maklumatakaun | detailakaun
----------------------------------
id(A.I) | idDetail(A.I)
NoAkaun | KodLokasi
KodBahagian | NoTelefon
KodKategori | KodJenisAkaun
KodKategori | id
Tarif |
我正在尝试一次更新两个表中的数据(maklumatakaun,detailakaun),在 detailakaun 中有“KodLokasi”、“KodJenisAkaun”和“NoTelefon”列,在一个 ID 下可能有多个数据条目。这是我到目前为止得到的结果
提取($_POST);
如果 ($_POST) {
$NoAkaun = isset($_POST['NoAkaun']) ? $_POST['NoAkaun'] : '';
$KodBahagian = isset($_POST['KodBahagian']) ? $_POST['KodBahagian'] : '';
$Tarif = isset($_POST['Tarif']) ? $_POST['Tarif'] : '';
$KodDaerah = isset($_POST['KodDaerah']) ? $_POST['KodDaerah'] : '';
$KodKategori = isset($_POST['KodKategori']) ? $_POST['KodKategori'] : '';
$NoTelefon = isset($_POST['NoTelefon']) ? $_POST['NoTelefon'] : '';
$KodLokasi = isset($_POST['KodLokasi']) ? $_POST['KodLokasi'] : '';
$KodJenisAkaun = isset($_POST['KodJenisAkaun']) ? $_POST['KodJenisAkaun'] : '';
$akaun_id = isset($_POST['akaun_id']) ? $_POST['akaun_id'] : '';
$sql = mysql_query("UPDATE maklumatakaun
SET NoAkaun = '$NoAkaun' ,
KodBahagian = '$KodBahagian' ,
KodDaerah = '$KodDaerah' ,
KodKategori = '$KodKategori' ,
Tarif = '$Tarif' ,
WHERE id = '$id'");
$akaun_id = mysql_insert_id();
foreach ($NoTelefon AS $i => $telefon){
$sql= mysql_query ("UPDATE detailakaun
SET KodJenisAkaun = '$KodJenisAkaun[$i]' ,
KodLokasi = '$KodLokasi[$i]' ,
NoTelefon = '$telefon'
");
此代码将更新两个表中的所有列,但假设一个帐户已注册 3 个“KodLokasi”、“KodJenisAkaun”和“NoTelefon”,然后当仅使用 3 个列中的一个进行更新时,它将重复自身到 3. 我怎样才能正确更新这个?
【问题讨论】:
-
似乎您需要在第二个更新语句上使用 WHERE 子句。确定您要更新的哪些行。此代码对 SQL 注入开放。已经是 2015 年了,为什么我们要使用已经弃用了多少年的 mysql 接口给出示例? mysqli 和 PDO 接口都提供对准备好的语句的支持。我不知道为什么在
UPDATE查询之后调用mysql_insert_id函数。为什么那里有塑料?仅在成功插入具有由 AUTO_INCREMENT 分配的 col 的行的 INSERT 之后立即返回有效。