1

根据这篇文章(http://blogs.msdn.com/b/miah/archive/2008/02/17/sql-if-exists-update-else-insert.aspx)我想做这样的事情:

UPDATE chunks SET targets = CONCAT(targets, ",phpValue1") 
    WHERE scopeX=phpValue2 AND scopeY=phpValue3;

IF ROW_COUNT() = 0
    INSERT INTO chunks (scopeX, scopeY, targets) VALUES (phpValue2,phpValue3,phpValue1)

但后来我收到这个错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'IF ROW_COUNT() = 0 INSERT INTO chunks (scopeX, scopeY, targets) 附近使用正确的语法

在条件之后,我也尝试使用“THEN”,但它也不起作用。有趣的是,我认为我正在使用最新版本的 XAMPP,当我正确查找时,它仍然使用 MySQL 5.0。

确定 phpValue* 是由 php 正确插入的,非常感谢您的帮助 =)

4

4 回答 4

2

你不能像if没有围绕它的函数那样使用控制语句。您必须将其放入函数、过程、触发器或事件中。

于 2013-11-04T16:30:27.433 回答
1

您正在参考有关 MS SQL 的 Microsoft 文章,但您使用的是 MySQL。尽管它们有相似之处,但它们是不同的语言,以不同的方式工作。

这种 IF 语句在 MySQL 中不起作用,但在 MS SQL 中可能会起作用。

于 2013-11-04T16:35:30.767 回答
0

在 PHP 中:

$query = mysql_query ("select * from ...........");
$count = mysql_affected_rows();
于 2013-11-04T16:51:14.123 回答
0

在 MySQL 中,您需要在存储过程中执行此操作。这是 FOUND_ROWS() 和 IF.... 的基本结构。

 DELIMITER $$

 CREATE PROCEDURE `testproc`()    
 BEGIN

 SET @INS = "SELECT * FROM  yourschema.yourtable;";
 PREPARE STMT FROM @INS;
 EXECUTE STMT;
 DEALLOCATE PREPARE STMT;

 SET @i = FOUND_ROWS();

 IF(@i > 0) THEN SELECT 1; 
 END IF;

 END $$

 DELIMITER ;
于 2013-11-04T17:49:29.237 回答