2017-07-16 108 views
0

我試過尋找,但無法找到爲什麼我的代碼不工作。PDO BindParam和BindValue不能正常工作

這是我無法工作 - 查詢不返回任何內容,實際上處理停止在執行。

如果我在execute硬編碼值,它的工作原理:

$CID = $_POST [ 'loginPageCID' ]; 
$LID = $_POST [ 'loginPageLID' ]; 
$PWD = $_POST [ 'loginPagePwd' ]; 

require_once('connectdb.php'); 

$sql = " 

    SELECT u.*, c.cname, c.cstatus 
    FROM t_users u, t_customers c 
    WHERE u.cid = ? 
    AND c.cid = u.cid 
    AND u.login_id = ? 
    AND u.pwhash = ? 

    "; 

$stmt = $conn->prepare ($sql); 

$stmt->execute (array(1, 'su1', 'hello')); 

$row = $stmt->fetchAll(); 

隨着它上面的工作,但如果我嘗試使用變量的執行似乎靜默失敗:

$CID = $_POST [ 'loginPageCID' ]; 
$LID = $_POST [ 'loginPageLID' ]; 
$PWD = $_POST [ 'loginPagePwd' ]; 

require_once('connectdb.php'); 

$sql = " 

    SELECT u.*, c.cname, c.cstatus 
    FROM ids_users u, ids_customers c 
    WHERE u.cid = ? 
    AND c.cid = u.cid 
    AND u.login_id = ? 
    AND u.pwhash = ? 

    "; 

$stmt = $conn->prepare ($sql); 

$stmt->bindParam(1, $CID, PDO::PARAM_INT); 
$stmt->bindParam(2, $LID, PDO::PARAM_STR); 
$stmt->bindParam(3, $PWD, PDO::PARAM_STR); 

$stmt->execute(); // fails here 

$row = $stmt->fetchAll(); 

編輯:

connectdb.php如下:

$conn; 

try { 
    $conn = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    } 
catch(PDOException $e) 
    { 
    echo "Error: " . $e->getMessage(); 
    } 
+0

你有[啓用例外](http://php.net/manual/en/pdo.error-handling.php)?如果是這樣,什麼都不應該默默地失敗。 – tadman

+0

@tadman - 添加了用於創建問題連接的代碼。 – TenG

+0

仔細查看您回來的結果對象。仔細檢查您的錯誤日誌中是否有任何通知。 – tadman

回答

0

我有同樣的問題,我發現這個職位的解決方案:在第二個答案,當用戶建議避免使用bindParam或bindValue功能PDO早已較短的方式

PDO - bindParam not working

將參數分配給SQL查詢。