簡體   English   中英

存儲過程返回空結果

[英]stored procedure returns empty result

以下是我的存儲過程:

DELIMITER $$
--
-- Procedures
--
DROP PROCEDURE IF EXISTS `checkLogin`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `checkLogin`(IN `uname` VARCHAR(255), IN `pwd` VARCHAR(255))
BEGIN
    SELECT a.id, a.role_id, b.name FROM userTable as a
    LEFT JOIN roleTable as b on b.id = a.role_id 
    WHERE a.username = uname AND password = pwd;
END$$

DELIMITER ;

以下是我的執行代碼:

    $stmt = $this->dbCon->prepare("CALL checkLogin(?, ?)");

    $stmt->bindParam(1, $email, PDO::PARAM_STR, 4000); 
    $stmt->bindParam(2, $password, PDO::PARAM_STR, 4000); 

    // call the stored procedure
    $stmt->execute();

    //var_dump($res);
    $op = ( $stmt ) ? $stmt->fetchAll(PDO::FETCH_ASSOC) : '';

    echo '<pre>'; print_r($op); die;

在上面的$this->dbCon是我的PDO對象。

當我執行此代碼時,我只獲得空結果。 但是當我通過phpmyadmin運行程序時,它運行正常。

如果我通過命令行執行它甚至工作正常:

在此輸入圖像描述

我也試過下面的方法(收到答案),但仍然不成功

$stmt = $db->prepare("Call checkLogin(?,?);");
$stmt->execute(array($email,$password));

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

if (count($rows) == 0)
    echo 'Failed Login!'."\n";
else
    echo 'Logged In...'."\n".print_r($rows,true);

你可以嘗試某種方法,這是直接在execute方法中傳遞鍵值參數的另一種方法,命名占位符應該在程序中傳遞

$ stmt = $ this-> dbCon-> prepare(“CALL checkLogin(:Email,:Password)”);

$ keyArray = array(“Email”=>“test@test.com”,“密碼”=>“123456”);

$ stmt->執行($ keyArray);

這似乎對我有用。 但我沒有使用Bind參數。 綁定似乎對我也有用。 我還添加了PDO測試。

//-- Test if PDO is loaded properly.
if (extension_loaded ('PDO' )) { 
    echo 'PDO is loaded'."\n";
    if (extension_loaded('pdo_mysql')) 
        echo 'PDO mysql driver is loaded.'."\n"; 
    else 
        echo 'PDO mysql driver is NOT loaded.'."\n";
} else {
    echo 'PDO is NOT loaded!'."\n";
}

//-- Run a test
$email = 'rob@home.net';
$password = 'abc123!@#';

$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'toor');

$stmt = $db->prepare("Call checkLogin(?,?);");
$stmt->execute(array($email,$password));

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

if (count($rows) == 0)
    echo 'Failed Login!'."\n";
else
    echo 'Logged In...'."\n".print_r($rows,true);

輸出:

PDO is loaded
PDO mysql driver is loaded.
Logged In...
Array
(
    [0] => Array
        (
            [id] => 1
            [role_id] => 1
            [name] => edit
        )

)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM