2017-07-13 19 views
1

sqlsrv_prepareは、参照渡しのクエリパラメータが必要です。関数に値を渡して値を代入するにはどうすればよいですか?以下の例では、関数に値を渡して参照値を設定しようとしても、何も返されません。参照された変数に関数外の値を代入すると、それらの値を使ってデータを返します。関数内の渡されたパラメータに値を代入する

$getNotesSQL = "SELECT pat_id as PAT_ID, note_id as NOTE_ID, CONVERT(char(10), UPDATE_DATE, 120) as UPDATE_DATE "; 
$getNotesSQL .= "FROM CLARITY.dbo.HNO_INFO"; 
$getNotesSQL .= " WHERE ip_note_type_c = ? "; 
$getNotesSQL .= " AND (UPDATE_DATE >= ? AND UPDATE_DATE <= ?)"; 

if (!$getNotes = sqlsrv_prepare($clarity, $getNotesSQL, array(&$noteType, &$startDate, &$endDate))) { 
    echo "getNotesSQL couldn't be prepared\n"; 
    die(print_r(sqlsrv_errors(), true)); 
} 

$note_type = strval(1); 
$start_date = "2017-05-29"; 
$end_date = "2017-07-11"; 

/** 
$noteType = strval(1); 
$startDate = "2017-07-01"; 
$endDate = "2017-07-11"; 
*/ 

function getNotes($getNotes, $note_type, $start_date, $end_date) { 

    $noteType = $note_type; 
    $startDate = $start_date; 
    $endDate = $end_date; 

    if (!sqlsrv_execute($getNotes)) {`enter code here` 
     echo "getNotes Couldn't be executed\n"; 
     die(print_r(sqlsrv_errors(), true)); 
    } 

    $noteArray = array(); 
    $iii=0; 
    while ($row = sqlsrv_fetch_array($getNotes, SQLSRV_FETCH_ASSOC)) { 
    //  print_r($row); 
     $noteArray[$iii] = $row; 
     $iii++; 
    } 

    echo "In getNote Function iii: (" . $iii .")\n"; 
    print_r($noteArray); 
    return $noteArray; 
} 



$fetchedNotes = getNotes($getNotes, $note_type, $start_date, $end_date); 

print_r($fetchedNotes); 

答えて

0

私はそれの背後にある理由に完全にはよく分からない - 私はそれがスコープとは何かを持っているかもしれないと思う - しかし、あなたは参照渡しするクエリパラメータ変数を関数にあまりにも必要です。

したがって、このような何か:

function getNotes($getNotes, $note_type, $start_date, $end_date, &$noteType, &$startDate, &$endDate){ 
    //perform query 
} 

は、今では少し醜いし、維持するのは非常に迷惑なんだクエリパラメータの数は変更する必要があります。しかし、値とクエリパラメータを配列にグループ化し、配列を関数に渡すことができます。このように:

function getNotes($getNotes, $values, $params){ 
    foreach($params as $key => &$param){ 
     $param = $values[$key]; 
    } 

    // sqlsrv_execute 
} 

$values = [$note_type, $start_date, $end_date]; 
$params = [&$noteType, &$startDate, &$endDate]; 

$fetchedNotes = getNotes($getNotes, $values, $params); 

これは私のusersテーブルでこれと似たように試してみましたが、うまくいくようです。

+1

はい、醜いですが、グローバルに頼らなくても機能します – Rebe

関連する問題