2013-03-17 120 views
-1

我想在同一时间删除与患者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的名称相呼应,很好...

+0

它甚至工作,如果你手动运行查询? – Sebas 2013-03-17 18:35:14

+2

注意:考虑使用参数而不是直接输入,或者让自己开放给sql注入,特别是因为你直接从GET获取patid http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection -in-php – Christian 2013-03-17 18:44:29

+0

@Sebas通过手动删除你的意思是来自phpMyAdmIn吗?如果是的话,它从那里工作正常... – 2013-03-17 18:51:49

回答

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。考虑使用PARAMS在patid传递,你正在使用的值直接从打开自己高达SQL注入GET

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

个百分点。你也应该把回声最后,因为你没有真正删除在这一点:)

+0

谢谢我已经尝试过,但它仍然不工作,是的,我注意到中间的回声! ; -0 – 2013-03-17 19:23:04

+0

我刚刚创建了两个表并使用虚拟数据填充它们,运行该代码并运行。打开mysqlworkbench/phpmyadmin并创建一个约会虚拟患者,然后直接在mysqlworkbench/phpmyadmin中运行代码。让我知道。 – Christian 2013-03-17 19:29:41

+0

谢谢!嗯,也许它是因为患者ID我正在尝试它没有与他们的ID相关联的约会',这会有所作为吗? – 2013-03-17 19:36:23