Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个mysql例程在XAMPP的phpMyAdminSQL控制台中总是返回false?_Mysql_Phpmyadmin_Xampp_Routines - Fatal编程技术网

为什么这个mysql例程在XAMPP的phpMyAdminSQL控制台中总是返回false?

为什么这个mysql例程在XAMPP的phpMyAdminSQL控制台中总是返回false?,mysql,phpmyadmin,xampp,routines,Mysql,Phpmyadmin,Xampp,Routines,我刚刚使用以下安装程序重新安装了XAMPP:XAMPP-win32-1.8.3-2-VC11-installer。下面的问题仍然存在。我保存了该例程,并从phpMyAdminSQL控制台调用了它 环境:5.6.14-MySQL社区服务器GPL,Apache/2.4.7 Win32 OpenSSL/1.0.1e PHP/5.5.6 细分如下:仅当以前不存在记录时才尝试插入记录。插入记录后,我请求返回该记录,否则返回false。在下面的存储过程中,即使插入了新记录,我也会得到一个假返回。就像ELSE

我刚刚使用以下安装程序重新安装了XAMPP:XAMPP-win32-1.8.3-2-VC11-installer。下面的问题仍然存在。我保存了该例程,并从phpMyAdminSQL控制台调用了它

环境:5.6.14-MySQL社区服务器GPL,Apache/2.4.7 Win32 OpenSSL/1.0.1e PHP/5.5.6

细分如下:仅当以前不存在记录时才尝试插入记录。插入记录后,我请求返回该记录,否则返回false。在下面的存储过程中,即使插入了新记录,我也会得到一个假返回。就像ELSE语句被忽略一样。为什么会发生这种情况,如何纠正

DROP PROCEDURE IF EXISTS `session_initiation`//

CREATE PROCEDURE `session_initiation`(
    IN _user_id     bigint(20),
    IN _device_id   bigint(20),
    IN _token       varchar(255)
)
BEGIN
    IF NOT EXISTS 
    (
        SELECT (1) from active_session where token = _token 
    )  
    THEN
        INSERT INTO active_session (user_id, device_id, token, datetime_create, datetime_expiry ) VALUES ( _user_id, _device_id, _token, NOW(), NOW() + INTERVAL 1 DAY );
        SELECT * from active_session where token = _token;
    ELSE
         SELECT FALSE;
    END IF;
END//
如果记录不存在,我希望插入该记录,然后返回相同的记录。相反,我插入了记录,并返回以下内容:

FALSE
_____
  0
感谢任何能帮助我解决问题的人。我直接从phpmyadmin SQL控制台中的SQL选项卡运行此操作

以下是对该过程的一些调用:

call session_initiation(1,1,'abc123')   //inserts and returns false = 0
call session_initiation(1,1,'123abc')   //inserts and returns false = 0
call session_initiation(1,1,'abc123')   //returns false = 0, does not reinsert the record.
由@wchiquito演示

我提供的解决方案在中是正确的。我做了一些轻微的修改以包括一个主字段,它是自动递增的

以下是表格的详细信息:

DROP TABLE IF EXISTS `active_session`;
CREATE TABLE IF NOT EXISTS `active_session` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) NOT NULL,
  `device_id` bigint(20) NOT NULL,
  `token` varchar(255) DEFAULT NULL,
  `datetime_create` datetime DEFAULT NULL,
  `datetime_expiry` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`session_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
更改:

... 如果不存在,则从活动\u会话中选择1,其中令牌=\u令牌,然后 ... 作者:

更新


创建测试后,您描述的问题我无法重现。您的代码按预期工作。存储过程似乎不是问题所在。

我尝试了许多不同的方法,但似乎没有一种能正常工作。我升级了phpMyAdmin,现在当我运行任何存储过程时,都不会显示输出。我想我可能会尝试不依赖phpMyAdminSQL控制台来获得解决方案。即使是最简单的获取国家/地区列表的过程也无法正确显示。谢谢。下次我必须记住使用sql FIDLE。我重新安装了XAMPP,问题并没有消失。所以我重新打开了这个,包括了更多的信息。感谢您向我展示sqlfiddle,但是环境中有一个bug阻止了我前进:您能从MySQL命令行运行存储过程吗?这样做的目的是为了排除phpMyAdmin的问题。我使用xampp控制器中提供的shell运行它,是的,查询生成了正确的结果——这让我很开心。在phpmyadmin端没有。问题似乎在phpAdmin中,而不是在存储过程中。是的。我去了phpadmin的我的支持页面,上面写着转到这里。所以我用phpmyadmin标签和例程再次打开了这个问题。让过程返回false对我来说是一个糟糕的举动,因为如果pdo语句以任何形式失败,它将返回false。我将其更改为字符串并得到了我想要的结果,但我确实喜欢在phpmyadmin控制台上检查我的例程,以验证正在执行的操作是否符合我的要求。我累坏了。。。希望phpmyadmin的人看到这一点,并在将来的版本中修复它。
...
IF (SELECT (1) from active_session where token = _token) IS NOT NULL THEN
...