为函数中传递的参数赋值

assigning a value to a passed parameter in a function

sqlsrv_prepare 要求通过引用传递查询参数。如何将值传递给函数并为其赋值?在下面的示例中,如果我将一个值传递给函数并尝试设置引用值,则不会返回任何内容。如果我在函数之外为引用变量分配一个值,它 returns 使用这些值的数据,即使我在函数中为它们分配了其他值。

$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);

我不完全确定它背后的原因 - 我认为它可能与范围有关 - 但你也需要将查询参数变量通过引用传递到函数中。

所以像这样:

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);

我在我的用户 table 上尝试了类似的东西来测试它,它似乎工作正常。