1

我重新启动了 MySQL 服务,并尝试使用我的 PHP 程序删除功能来删除现有的行,但我发现虽然删除查询被计算在内,但该行没有被删除。我尝试将删除级联应用于子表的外键,但这似乎没有效果。我想知道为什么删除会什么都不做。

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;
?>
4

1 回答 1

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 或 toad 或您使用的任何数据库客户端中手动尝试查询来进行故障排除,看看它告诉您什么。如果它只是说0 rows affected,然后像 a 一样运行它select。量身定制。

于 2013-01-03T15:38:25.840 回答