在 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”语句的主要内容,如果未能解决你的问题,请参考以下文章

PHP 结构语句

PHP条件控制语句之“if语句”

PHP Sql 语句从 MySQL 导出表数据

PHP控制语句之“if...else”语句

SQL 语句超过 PHP 中的最长时间,但在 phpMyAdmin 中立即运行

PHP流程控制 - if 语句