2016-12-13 5 views
0

こんにちは私は、PHPを介して自分のsqlserverデータベース内のストアドプロシージャを実行しようとしています。私はストアドプロシージャを実行する前に動作していた次のコードを持っています。今回はストアドプロシージャにパラメータが含まれていますが、これは宣言するのが困難です。 2つのパラメタはTODATEとFROMDTで、前のページの日付入力ボックスから来ています。ストアドプロシージャのパラメータをPHP

enter <?php 
ini_set('display_errors', 1); 
error_reporting(~0); 

$serverName = ""; 
$userName = ""; 
$userPassword = ''; 
$dbName = "ENERGY"; 

$connectionInfo = array("Database"=>$dbName, "UID"=>$userName, "PWD"=>$userPassword, "MultipleActiveResultSets"=>true); 

$conn = sqlsrv_connect($serverName, $connectionInfo); 

if($conn === false) { 
    die(print_r(sqlsrv_errors(), true)); 
} 



$FROMDT = 'POST_["FROMDT"]'; 
$TODATE = 'POST_["TODATE"]'; 
$params = array($FROMDT, $TODATE); 


$sql = "ENERGY.dbo.P_KPI_DAILY_D $FROMDT $TODATE" ; 
+2

あなたがSPを実行しているようには見えません。 http://php.net/manual/en/function.sqlsrv-execute.php –

+2

とこれらの 'POST_'はすべて間違っています。スーパーグローバル上のRTM http://php.net/manual/en/language.variables.superglobals.php –

+0

こんにちはジェイナー私はsqlsrv_executeを使用しませんでした。私はこれまでにこのようにしていましたが、それは機能していました。私は実行関数を使用する方法に慣れていないので、私はそれを避けようとしていました。 – pete

答えて

0

投稿データが正しく取得されていません。

変更するには

$FROMDT = 'POST_["FROMDT"]'; 

$FROMDT = ''; 
if(isset($_POST['FROMDT'])){ 
    $FROMDT = $_POST['FROMDT']; 
} 
if($FROMDT == ''){ 
    // error handling 
} 

はまた、あなたが持っていることを確認、正しい権限は、MSSQLのユーザーのためのPROCを実行/書き込み。

コードをきれいにすることもできます。以下は、バインディングパラメータを自動化し、分析を可能にするために構築した 'DataHandler'から抽出されたものです。

<?php 

    define("CONN_STRING", "sqlsrv:server=".DB_SERVER."; Database =".DB_NAME); 

    try{ 
     $this->conn = new PDO($sConnString, $sDB_USER, $sDB_PASSWORD); 
     $this->conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
     $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    }catch(PDOException $e){ 
     echo 'Connection failed: <bR>'; //.$e->getMessage(); 
     exit; 
    } 


    $st = $conn->prepare($sSQL); 

    $this->st->bindValue($sParamName, $_POST['ParmName'], PDO::PARAM_INT); 

    $this->st->execute(); 



?> 
関連する問題