Я решил это.Вместо того, чтобы создавать функцию в MySQL с возвратом по умолчанию, я создал ее как процедуру Store с 2 параметрами IN и 1 Param OUT и назначил значение этому параметру OUT внутри процедуры в соответствии с моими условиями без оператора return.
CREATE DEFINER=`root`@`localhost` PROCEDURE `F_esUsuarioValido`(
IN `USUARIO_IN` VARCHAR(50),
IN `CONTRASENA_IN` VARCHAR(50),
OUT `ES_VALIDO_OUT` TINYINT
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
BEGIN
DECLARE EXISTE INT;
SELECT STATUS
INTO EXISTE
FROM T_USUARIO
WHERE USUARIO = USUARIO_IN
AND CONTRASENA = CONTRASENA_IN;
IF EXISTE IS NULL THEN
SET ES_VALIDO_OUT = 0;
ELSEIF EXISTE = 1 THEN
SET ES_VALIDO_OUT = 1;
ELSEIF EXISTE = 0 THEN
SET ES_VALIDO_OUT = 2;
END IF;
END
Затем в PHP PDO я изменил свое утверждение, чтобы иметь параметры 2IN и 1 OUT, использовал PDO :: bindParam, чтобы установить только параметры IN, а для получения параметра OUT пришлось запросить SELECT @OUTParam:
public function esUsuarioValido($usuarioIN, $contrasenaIN) {
$con = new ConexionMySQL();
$pdo = $con->conectar();
$sql = 'CALL F_esUsuarioValido(:usuario, :contrasena, @esValido)';
$stmt = $pdo->prepare($sql);
$stmt->bindParam(":usuario", $usuarioIN, PDO::PARAM_STR);
$stmt->bindParam(":contrasena", $contrasenaIN, PDO::PARAM_STR);
$stmt->execute();
$stmt->closeCursor();
$row = $pdo->query("SELECT @esValido AS esValido")->fetch(PDO::FETCH_ASSOC);
var_dump($row);
}
После этого var_dump ($ row) показывает переменную esValido с правильным значением.
Этот веб-сайт мне очень помог: http://www.mysqltutorial.org/php-calling-mysql-stored-procedures/
Чтобы узнать разницу между функцией и возвратом хранимой процедурыЦенности, которые помог этот веб-сайт: https://www.quora.com/What-difference-between-stored-procedures-and-functions-in-MySQL
Надеюсь, что этот ответ может помочь многим другим людям.Привет!