为函数中传递的参数赋值
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 上尝试了类似的东西来测试它,它似乎工作正常。
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 上尝试了类似的东西来测试它,它似乎工作正常。