방금 설치 관리자 인 xampp-win32-1.8.3-2-VC11-installer를 사용하여 XAMPP를 다시 설치했습니다. 아래 문제는 여전히 존재합니다. 루틴을 저장하고 phpMyadmin SQL 콘솔에서 호출했습니다.왜이 mysql 루틴은 XAMPP의 phpmyadmin SQL 콘솔에서 항상 false를 반환합니까?
Environemnt : - : 만 레코드를 삽입하려고 5.6.14 다음과 같이 MySQL의 커뮤니티 서버 (GPL), 아파치/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
에 의해 내가 제공하는 솔루션은 SQL Fiddle에서 올바른 : 여기
는 절차에 일부 호출합니다. 기본 필드를 포함하도록 약간의 수정을했는데 auto_incremented입니다.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;
MySQL 명령 줄에서 저장 프로 시저를 실행할 수 있습니까? 그 목적은 phpMyAdmin으로 문제를 배제하는 것입니다. – wchiquito
xampp 컨트롤러에서 제공하는 쉘을 사용하여 실행했는데 쿼리가 올바른 결과를 생성합니다. phpmyadmin 쪽에서는 그렇지 않습니다. – mcv
문제는 phpAdmin에 있고 저장 프로 시저에없는 것 같습니다. – wchiquito