如果ROW_COUNT()返回错误

时间:2013-11-04 16:28:49

标签: php mysql sql

根据这篇文章(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块(scopeX,scopeY,targets)

在条件之后我也尝试了“那么”,但它也没有用。 可能有趣的是,我正在使用最新版本的XAMPP,我认为,当我正确查找时,它仍使用MySQL 5.0。

肯定phpValue *是由php正确插入的 非常感谢你的任何帮助=)

4 个答案:

答案 0 :(得分:1)

如果没有围绕它的函数,则不能使用if之类的控制语句。你必须把它放在一个函数,过程,触发器或事件中。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

在PHP中:

$query = mysql_query ("select * from ...........");
$count = mysql_affected_rows();

答案 3 :(得分: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 ;