2017-03-18 46 views
0

我要調用的程序(寫入插入表中的數據)使用PDO PHP ,但是程序沒有得到called.Don't知道我做錯了 下面是我的代碼,任何人都可以建議我使用PDO PHP調用Oracle Procedure的最佳方式。調用Oracle存儲過程使用PDO PHP

<?php 
    require("connection.php"); 
    date_default_timezone_set('Asia/Kolkata'); 

    $PARTY_C = 36317; 
    $CONN_NO = 479; 
    $EST_C = 86; 
    $STATUS = 'F'; 
    $FAULTY_STATUS = 'PM'; 
    $BILL_DT = date('d/m/Y'); 
    $CURR_READ = 1000; 
    $PENALTY = 35; 
    $ADJSTMNT = 245; 
    $MTR_CHNG_DT = date('d/m/Y'); 
    $OLD_MTR_READ = 900; 
    $METER_RES_DT = date('d/m/Y'); 
    $PREV_OS_A_M = 1; 
    $PREV_INT_A_M = 34; 
    $PREV_PI_A_M = 45745; 
    $PARTY_M = 'abc'; 

$stmt = $conn->prepare("CALL PH_STATUS(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); 
$stmt->bindParam(1, $PARTY_C, PDO::PARAM_INT); 
$stmt->bindParam(2, $CONN_NO, PDO::PARAM_INT); 
$stmt->bindParam(3, $EST_C, PDO::PARAM_INT); 
$stmt->bindParam(4, $STATUS, PDO::PARAM_STR); 
$stmt->bindParam(5, $FALTY_STATUS, PDO::PARAM_STR); 
$stmt->bindParam(6, $BILL_DT, PDO::PARAM_STR); 
$stmt->bindParam(7, $CURR_READ, PDO::PARAM_INT); 
$stmt->bindParam(8, $PENALTY, PDO::PARAM_INT); 
$stmt->bindParam(9, $ADJSTMNT, PDO::PARAM_INT); 
$stmt->bindParam(10, $MTR_CHNG_DT, PDO::PARAM_STR); 
$stmt->bindParam(11, $OLD_MTR_READ, PDO::PARAM_INT); 
$stmt->bindParam(12, $METER_RES_DT, PDO::PARAM_STR); 
$stmt->bindParam(13, $PREV_OS_A_M, PDO::PARAM_INT); 
$stmt->bindParam(14, $PREV_INT_A_M, PDO::PARAM_INT); 
$stmt->bindParam(15, $PREV_PI_A_M, PDO::PARAM_INT); 
$stmt->bindParam(16, $PARTY_M, PDO::PARAM_STR); 

$stmt->execute(); 

print "procedure returned $stmt\n"; 

?> 

回答

0

如這裏http://php.net/manual/en/pdo.prepared-statements.php發現,你必須使用bindParameter以另一種方式,或者你要使用bindValue。 (一個很好的解釋都可以在這裏找到Using pdo in php with stored procedure

這應該工作:

... 
$stmt->bindValue(1, $PARTY_C, PDO::PARAM_INT); 
$stmt->bindValue(2, $CONN_NO, PDO::PARAM_INT); 
$stmt->bindValue(3, $EST_C, PDO::PARAM_INT); 
... 
+0

我想這也不過不是爲我工作。 – amar

+0

你也應該閱讀文檔。這是如何在PDO中使用存儲過程的唯一方法。如果沒有,您的程序有另一個名稱或不起作用。 – Oliver