2013-01-03 174 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