2013-01-03 59 views
1

我重新启动了MySQL服务,并试图使用我的PHP程序删除功能删除现有的行,但我发现虽然删除查询被计算为行未被删除。我尝试应用删除级联到子表的外键,但似乎没有效果。我想知道为什么删除将无所事事。MySQL删除故障排除

CREATE TABLE `customers` (
    `idcustomers` int(11) NOT NULL AUTO_INCREMENT, 
    `firstname` varchar(45) DEFAULT NULL, 
    `lastname` varchar(45) DEFAULT NULL, 
    `address1` varchar(45) DEFAULT NULL, 
    `address2` varchar(45) DEFAULT NULL, 
    `city` varchar(45) DEFAULT NULL, 
    `state` varchar(45) DEFAULT NULL, 
    `zip` varchar(45) DEFAULT NULL, 
    `phone` varchar(45) DEFAULT NULL, 
    `email` varchar(45) DEFAULT NULL, 
    `cell` varchar(45) DEFAULT NULL, 
    PRIMARY KEY (`idcustomers`), 
    UNIQUE KEY `idcustomers_UNIQUE` (`idcustomers`) 
) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=latin1 


CREATE TABLE `events` (
    `idevents` int(11) NOT NULL AUTO_INCREMENT, 
    `title` varchar(250) DEFAULT NULL, 
    `start` datetime DEFAULT NULL, 
    `end` datetime DEFAULT NULL, 
    `allday` varchar(50) DEFAULT NULL, 
    `url` varchar(1000) DEFAULT NULL, 
    `customerid` int(11) NOT NULL, 
    `memo` longtext, 
    `dispatchstatus` varchar(45) DEFAULT NULL, 
    PRIMARY KEY (`idevents`), 
    KEY `FK_events` (`customerid`), 
    CONSTRAINT `FK_events` FOREIGN KEY (`customerid`) REFERENCES `customers` (`idcustomers`) ON DELETE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=latin1 

Com_delete 2 

的PHP是这样的:

<?php 
session_start(); 

date_default_timezone_set("America/Los_Angeles"); 

if($_SESSION['loggedin'] != TRUE) 
{ 
header("Location: index.php"); 
} 

require_once('../php.securelogin/include.securelogin.php'); 
$mysqli = new mysqli($ad_host, $ad_user, $ad_password, "samedaycrm"); 

if ($mysqli->connect_errno) { 
printf("Connect failed: %s\n", $mysqli->connect_error); 
exit(); 
} 


$customerid = $_SESSION['customer_id']; 

$tSQL = "delete from events where customerid = \"$customerid\""; 
$result = $mysqli->query($tSQL); 

$tSQL = "delete from customers where idcustomers = \"$customerid\""; 
$result = $mysqli->query($tSQL); 



echo $mysqli->error; 
?> 

回答

1

假设customerididcustomers列都是数字应该罚款。你不应该引用这些查询中的变量顺便说一句,那么你不需要逃避它们。您可以尝试:

$tSQL = "delete from events where customerid = $customerid"; 

,但它不应该是比你用什么已经有什么不同。当然,如果你不知道该列的类型可以使用:

$tSQL = "delete from events where customerid = '".$customerid."'"; 

,或者你可以逃脱:

$tSQL = "delete from events where customerid = '$customerid'"; 

但我一直痛恨,由于某种原因。

如果所有的失败被吐出的$customerid(甚至整个$tSQL)变量,然后在phpMyAdmin或蟾蜍或任何DB客户端使用手动尝试查询排查,看看它会告诉你。如果它只是说0 rows affected,那么就像select那样运行它。适合裁缝。

+0

非常有帮助的评论。谢谢。 – Giuseppe