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

と の列が両方とも数値であると仮定すると、問題ありませcustomeridん。idcustomersこれらのクエリで変数を引用符で囲む必要はありません。その後、それらをエスケープする必要はありません。あなたは試すことができます:

$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、または使用している db クライアントで手動でクエリを試行し、それが何を示しているかを確認します。というだけの場合は、代わりに0 rows affecteda のように実行しselectます。フィットするように調整します。

于 2013-01-03T15:38:25.840 に答える