我已经在这个问题上坚持了几个小时了......
这是我的代码:
$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
编辑:通过在 else
语句中执行 $SQLQuery2=NULL
来使其工作...很糟糕,我仍然无法弄清楚为什么它不能以原始方式工作.
最佳答案
您似乎正在尝试对 typesize
强制执行唯一性约束您的专栏menusize
应用程序代码中的表。但是,数据库可以为您完成此操作,这将使您的后续操作变得更加简单:
ALTER TABLE menusize ADD UNIQUE (typesize)
现在,人们可以简单地尝试将发布的值插入表中,数据库将防止出现重复项。此外,如 INSERT ... ON DUPLICATE KEY UPDATE
Syntax 下所述:
If a table contains an
AUTO_INCREMENT
column andINSERT ... ON DUPLICATE KEY UPDATE
inserts or updates a row, theLAST_INSERT_ID()
function returns theAUTO_INCREMENT
value. Exception: For updates,LAST_INSERT_ID()
is not meaningful prior to MySQL 5.1.12. However, you can work around this by usingLAST_INSERT_ID(<em>expr</em>)
. Suppose thatid
is theAUTO_INCREMENT
column. To makeLAST_INSERT_ID()
meaningful for updates, insert rows as follows: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。)
关于php - MySQL 在 if 语句后停止运行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21150416/