【问题标题】:Php : 2 stored procedures called - "table name already exists"PHP:2个存储过程称为-“表名已经存在”
【发布时间】:2018-10-27 20:37:51
【问题描述】:

我在我的 php 文件中调用了这样的存储过程:

// PROCEDURE SQL
            $sql2 = "SELECT * FROM tmp ORDER BY day ASC;";

            //CALL WITH SESSION VARS
            if(!$mysqli->query("CALL proc1('". $_SESSION['var1']." ', '". $_SESSION['var2'] ." 00:00:00','". $_SESSION['var3'] ." 00:00:00');"))
                die($mysqli->error);

            //EXEC SQL2
            $result = $mysqli->query($sql2)
                or die($mysqli->error);

            $i=0;

            while ($row = $result->fetch_array(MYSQLI_ASSOC)) {

                //do some calculs on fetched results and get value from $row['x']


                if($row['r2'] == NULL){
                // SECOND PROCEDURE SQL
                // note : table name and procedure name are different
                $sql3 = "SELECT r2 FROM temp ORDER BY day DESC LIMIT 1;";

            //CALL WITH SESSION VARS AND LARGER DATE
            if(!$mysqli->query("CALL proc2('". $_SESSION['var1']." ', '2017-01-01 00:00:00','". $_SESSION['var4'] ." 00:00:00');"))
                die($mysqli->error);

            //EXEC
            $result2 = $mysqli->query($sql3)
                or die($mysqli->error);

            while ($row2 = $result2->fetch_array(MYSQLI_ASSOC)) {
                $value_r2 = $row2['r2'];
            }

我想这样做是因为我想更改在第一次调用中获取的数据的值(如果它返回 null)

你可以注意到我的两个过程不一样,每个过程的表名也不同,所以当我加载这段代码时,我的网页上怎么会有“临时表已经存在”?

编辑:

我的程序从我的数据库中获取结果并将数据插入到一个临时表中。 临时表的名称不同。 然后,当我调用该过程时,我会对关联的临时表进行查询。

【问题讨论】:

  • 您想公开产生错误的代码吗? IE。程序,流程。可能您在过程中创建了一个固定名称的临时表,但是在一个会话中不能有两个具有相同名称的临时表。
  • 哦完全忘了我会添加一些细节
  • “临时表已存在”是一个非常明确的消息,通常(如果不总是)在尝试创建 2 个具有相同名称的表时显示。你在你的程序中做什么?您是否在任何地方创建表格?
  • 我不能给出程序的代码,它是数百行,但我仔细检查过,每个临时表的名称都不相同。 @BrentLobbezoo 在我的程序中,我创建了一个临时表并将数据插入其中
  • 您可能在循环中调用您的过程。我真的不知道while ($row = $result->fetch_array(MYSQLI_ASSOC)) { 何时关闭。如果您还没有,也许将您的 CREATE 语句更改为 CREATE TABLE IF NOT EXISTS tablename

标签: php mysql sql stored-procedures mysqli


【解决方案1】:

这听起来可能有问题,或者可能是缓存问题。尝试以下方法之一:

FLUSH TABLES [tablename];
REPAIR TABLE tablename;
DROP TABLE tablename;

记得备份你的数据。

【讨论】:

  • 刷新表并没有解决问题。我无法对仅在调用过程时才存在的临时表执行其他命令
猜你喜欢
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 2014-05-18
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
  • 1970-01-01
相关资源
最近更新 更多