【问题标题】:Executing 'If' statements in PhpMyAdmin在 PhpMyAdmin 中执行“If”语句
【发布时间】: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

【问题讨论】:

    标签: mysql sql phpmyadmin


    【解决方案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
    • 这在异常查询中运行没有错误,即使我将它放入存储过程或函数中。
    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    相关资源
    最近更新 更多