【问题标题】:Inner join delete not working [closed]内部连接删除不起作用[关闭]
【发布时间】:2013-03-06 01:32:01
【问题描述】:

我正在尝试同时删除患者记录和与其患者 ID 关联的任何预约,但两者都不起作用,谁能告诉我哪里出错了?

我的代码是:

<?php
include("includes/staffmenu.php");
include("includes/staffsession.php");
@require_once("includes/dbconfig.inc");

$patid = $_GET['patid'];

$patientname = mysql_query("SELECT * From patient WHERE Patient_ID=$patid");
    while($row = mysql_fetch_array($patientname))
        {   $pfname=$row['Patient_First_Name'];
            $pmname=$row['Patient_Middle_Name'];
            $psname=$row['Patient_Surname'];
        }

  echo "<h1>Success $pfname $pmname $psname (Patient ID: $patid) has been removed from our database, along with any appointments in their name</h1>";

    mysql_query("DELETE FROM appointment, patient 
    USING patient INNER JOIN appointment ON (patient.Patient_ID = appointment.Patient_ID) 
    WHERE patient.Patient_ID='$patid'");

  ?>

它肯定得到的是患者 ID,因为患者 ID 的名称呼应得很好......

【问题讨论】:

  • 如果您手动运行查询,它是否有效?
  • 旁注:考虑使用参数而不是直接输入,否则您对 sql 注入持开放态度,特别是因为您直接从 GET *.com/questions/60174/… 获得 patid
  • @Sebas 手动删除是指来自 phpMyAdmIn 吗?如果是的话,它可以从那里正常工作......

标签: php html mysql inner-join sql-delete


【解决方案1】:
DELETE patients, appointments FROM patients
LEFT JOIN appointments USING(Patient_ID)
WHERE Patient_ID = 1

参考http://dev.mysql.com/doc/refman/5.5/en/delete.html

ps。考虑使用参数传递 patid,因为您正在使用直接来自 GET 的值打开自己的 sql 注入

http://php.net/manual/en/mysqli-stmt.bind-param.php

pps。你也应该把回声放在最后,因为那时你还没有真正删除:)

【讨论】:

  • 谢谢,我试过了,但还是不行,是的,我注意到中间有回声!! ;-0
  • 我刚刚创建了两个表并用虚拟数据填充它们,运行该代码并且它工作。打开 mysqlworkbench/phpmyadmin 并创建一个有约会的虚拟患者,然后直接在 mysqlworkbench/phpmyadmin 中运行代码。告诉我。
  • 谢谢!嗯,可能是因为我尝试使用的患者 ID 没有与他们的 ID 关联的预约,这会有所不同吗?
  • 是的,非常如此!改为将其更改为 LEFT JOIN 并尝试
  • 哇!!它奏效了……我想我还有很多东西要学!!非常感谢