您好我正在构建我的第一个网站,需要一个声明来删除包含用户指定的Patient_ID的2个表中的任何记录:
我试过了
mysql_query("DELETE FROM appointment
WHERE Patient_ID='$patid'
UNION
DELETE FROM patient
WHERE Patient_ID='$patid'");
以及
mysql_query("DELETE FROM appointment INNER JOIN patient
WHERE Patient_ID='$patid'");
真的很感激一些帮助!
提前致谢
答案 0 :(得分:4)
我宁愿为两个删除语句执行StoredProcedure
。
DELIMITER $$
CREATE PROCEDURE DeletePatient(IN PatientID INT)
BEGIN
DELETE FROM appointment WHERE Patient_ID = PatientID;
DELETE FROM patient WHERE Patient_ID = PatientID;
END $$
DELIMITER ;
和你的php脚本,
mysql_query("CALL DeletePatient($patid)");
作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。
答案 1 :(得分:1)
易
mysql_query("DELETE FROM appointment WHERE Patient_ID='$patid'");
mysql_query("DELETE FROM patient WHERE Patient_ID='$patid'");
不要忘记首先格式化你的$ patid:
$patid = mysql_real_escape_string($patid);
答案 2 :(得分:1)
可以在一个查询中执行:
$query = "DELETE FROM appointment, patient USING patient INNER JOIN appointment ON (patient.patient_id = appointment.patient_id) WHERE patient.patient_id = '" . intval($patid) . "'";
但是,为了保持数据完整性,这里最好的选择是在appointment
表上定义一个引用您的patient
表并包含ON DELETE CASCADE
子句的外键约束
答案 3 :(得分:0)
编辑:
正如Mark Baker在上面的陈述中所指出的,最好的方法是在表上正确定义外键。然而,假设它们不是,它们应该包含在一个事务中。
$query1 = "DELETE FROM appointment WHERE Patient_ID='".intval($patid)."'";
$query2 = "DELETE FROM patient WHERE Patient_ID='".intval($patid)."'";
mysql_query("START TRANSACTION", $yourConnection);
mysql_query("BEGIN", $yourConnection);
mysql_query($query1, $yourConnection);
mysql_query($query2, $yourConnection);
mysql_query("COMMIT", $yourConnection);
原始答案:
执行此操作的唯一方法是运行两个单独的DELETE命令。
$query1 = "DELETE FROM appointment WHERE Patient_ID='".intval($patid)."'";
$query2 = "DELETE FROM patient WHERE Patient_ID='".intval($patid)."'";