在 PhpMyAdmin 中执行“If”语句
Posted
技术标签:
【中文标题】在 PhpMyAdmin 中执行“If”语句【英文标题】:Executing 'If' statements in PhpMyAdmin 【发布时间】:2020-07-29 23:30:41 【问题描述】:我是使用 phpmyadmin 的新手。到目前为止,我习惯于在 mysql 中创建基本的原始查询。我有这个简单的查询,我试图通过 phpmyadmin 的 GUI 执行:
(所有以小写字母开头的列名都是GUI中定义的参数)
if((Select COUNT(*) from Reviews where ReviewID=reviewID AND UserID=userID) > 0)
THEN
Insert Into reviews(ReviewID, UserID, OrganizationID, ReviewText, ReviewMediaURLs, ReviewRating)
Values(reviewID, userID, organizationID, reviewText, reviewMediaURLs, reviewRating) ON DUPLICATE
KEY UPDATE ReviewText=reviewText, ReviewMediaURLs=reviewMediaUrls, ReviewRating=reviewRating
END IF
它会抛出一个错误,说The following query has failed to execute
。现在,我对 MySql 和 phpmyadmin 都是新手,所以我很难确定这是 phpmyadmin 处理查询的方式还是我的查询实际上是错误的。
如果有人能指出错误,将不胜感激。
编辑
到目前为止正确执行的语句是:
Insert Into reviews(ReviewID, UserID, OrganizationID, ReviewText,
ReviewMediaURLs, ReviewRating) Values(reviewID, userID, organizationID,
reviewText, reviewMediaURLs, reviewRating) ON DUPLICATE KEY UPDATE ReviewID=reviewID, ReviewText=reviewText, ReviewMediaURLs=reviewMediaUrls, ReviewRating=reviewRating
【问题讨论】:
【参考方案1】:这样的 IF THEN 构造,只适用于存储过程和函数。
对于普通查询:
SELECT IF(EXISTS(Select 1 from Reviews where ReviewID=reviewID AND UserID=userID)
, @sql:=' Insert Into reviews(ReviewID, UserID, OrganizationID, ReviewText, ReviewMediaURLs, ReviewRating)
Values(reviewID, userID, organizationID, reviewText, reviewMediaURLs, reviewRating) ON DUPLICATE
KEY UPDATE ReviewText=reviewText, ReviewMediaURLs=reviewMediaUrls, ReviewRating=reviewRating',@sql:='SELECT 1=1');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SELECT 确定哪个@sql 是SET。
剩下的是EXECUTE a statement
【讨论】:
它没有在 phpmyadmin 中执行并抛出同样的错误。 (对不起,我什至觉得自己像个初学者问这样的问题!) 然后检查您的插入语句。我链接到准备好的语句,以便您可以将 variables.reviewID 替换为用户定义的变量。并将它们添加到执行部分 我又重新检查了所有参数。该查询在没有IF
块的情况下执行,但不适用于它。检查我编辑的问题以查看工作部分。
这是错误:MySQL said: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt' at line 3
这在异常查询中运行没有错误,即使我将它放入存储过程或函数中。以上是关于在 PhpMyAdmin 中执行“If”语句的主要内容,如果未能解决你的问题,请参考以下文章