我已经被困在这几个小时了......
这是我的代码:
$SQLQuery1 = $db_info->prepare("SELECT COUNT(ID) FROM menusize WHERE typesize=:typesize");
$SQLQuery1->bindValue(':typesize',$_POST['typesize'],PDO::PARAM_STR);
$SQLQuery1->execute();
if($SQLQuery1->fetchColumn() > 0) {
$SQLQuery2 = $db_info->prepare("INSERT INTO menucatagorysize (menucatagory_ID,menusize_ID) VALUES (:catagoryid,(SELECT ID FROM menusize WHERE typesize=:typesize))");
$SQLQuery2->bindValue(':typesize',$_POST['typesize'],PDO::PARAM_STR);
$SQLQuery2->bindValue(':catagoryid',$_POST['catagoryid'],PDO::PARAM_STR);
$SQLQuery2->execute();
} else {
$SQLQuery2 = $db_info->prepare("INSERT INTO menusize (typesize) VALUES (:typesize);
SET @menusizeid=LAST_INSERT_ID();
INSERT INTO menucatagorysize (menusize_ID,menucatagory_ID) VALUES (@menusizeid,:catagoryid)");
$SQLQuery2->bindValue(':typesize',$_POST['typesize'],PDO::PARAM_STR);
$SQLQuery2->bindValue(':catagoryid',$_POST['catagoryid'],PDO::PARAM_STR);
$SQLQuery2->execute();
}
$SQLQuery3 = $db_info->prepare("SELECT DISTINCT(menuitem_ID) FROM menuprice WHERE menucatagory_ID=:catagoryid");
$SQLQuery3->bindValue(':catagoryid',$_POST['catagoryid'],PDO::PARAM_STR);
$SQLQuery3->execute();
$rows = $SQLQuery3->fetchAll(PDO::FETCH_ASSOC);
因此,它将运行if语句,运行$SQLQuery1
和$SQLQuery2
(只需要一个),没有任何问题,错误或警告。但是,如果它运行代码的else {
部分,它将不会运行$ SQLQuery3。有什么想法吗?
谢谢:D
编辑:通过在$SQLQuery2=NULL
语句中执行else
来使其工作......糟透了我仍然无法弄清楚为什么它不会以原始方式工作。
答案 0 :(得分:0)
您似乎正在尝试在应用程序代码中对typesize
表的menusize
列强制执行唯一性约束。但是,数据库可以为您执行此操作 - 这将使您的后续操作更加简单:
ALTER TABLE menusize ADD UNIQUE (typesize)
现在,可以简单地尝试将已发布的值插入表中,数据库将防止出现重复。此外,正如INSERT ... ON DUPLICATE KEY UPDATE
Syntax所述:
如果表包含
AUTO_INCREMENT
列并且INSERT ... ON DUPLICATE KEY UPDATE
插入或更新行,则LAST_INSERT_ID()
函数将返回AUTO_INCREMENT
值。例外:对于更新,LAST_INSERT_ID()
在MySQL 5.1.12之前没有意义。但是,您可以使用LAST_INSERT_ID(expr)
解决此问题。假设id
是AUTO_INCREMENT
列。要使LAST_INSERT_ID()
对更新有意义,请按如下方式插入行:INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
因此,您可以这样做:
$db_info->prepare('
INSERT INTO menusize (typesize) VALUES (:typesize)
ON DUPLICATE KEY UPDATE typesize=LAST_INSERT_ID(typesize)
')->execute(array(
':typesize' => $_POST['typesize']
));
$db_info->prepare('
INSERT INTO menucatagorysize
(menusize_ID, menucatagory_ID)
VALUES
(LAST_INSERT_ID(), :catagoryid)
')->execute(array(
':catagoryid' => $_POST['catagoryid']
));
$stmt = $db_info->prepare('
SELECT DISTINCT menuitem_ID
FROM menuprice
WHERE menucatagory_ID = :catagoryid
');
$stmt->execute(array(
':catagoryid' => $_POST['catagoryid']
));
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
// etc.
}
(顺便说一下,英文单词拼写为cat * e * gory,而不是cat * a * gory。)