2017-10-28 15 views
0

我有以下功能爲以下工作正常:無法傳遞名作爲參數傳遞給函數Php SQL當搜索用戶

function searchForRecordInUserTableUsername ($connection){ 
    $sql ="SELECT ID FROM UserTable WHERE Username='WILL'"; 
    $stmt = sqlsrv_query($connection, $sql); 
    if($stmt) { 
     while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC)) { 
      echo $row[0]; 
     } 
     sqlsrv_free_stmt($stmt); 
    } 
    else {die(print_r(sqlsrv_errors(), true)); } 
} 

不過,我需要能夠通過用戶名是對函數作爲參數,因爲它取決於用戶輸入。但是,我似乎無法使其發揮作用。以下是我已經嘗試了以下功能:

function searchForRecordInUserTableUsername ($username, $connection){ 
    $sql ="SELECT ID FROM UserTable WHERE Username=(?)"; 
    $params = $username; 
    $stmt = sqlsrv_query($connection, $sql, $params); 
    if($stmt) { 
     while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC)) { 
      echo $row[0]; 
     } 
     sqlsrv_free_stmt($stmt); 
    } 
    else {die(print_r(sqlsrv_errors(), true)); } 
} 

而且我自己也嘗試:

function searchForRecordInUserTableUsername ($username, $connection){ 
$sql ="SELECT ID FROM UserTable WHERE Username=$username"; 
$stmt = sqlsrv_query($connection, $sql); 
if($stmt) { 
    while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC)) { 
     echo $row[0]; 
    } 
    sqlsrv_free_stmt($stmt); 
} 
else {die(print_r(sqlsrv_errors(), true)); } 

}

並調用函數時,我已經把用戶名單打報價,雙引號和沒有引號,它似乎沒有任何區別。

以下是我正在錯誤的一個示例:

陣列([0] =>數組([0] => 42S22 [SQLSTATE] => 42S22 [1] => 207 [代碼] => 207 [2] => [Microsoft] [用於SQL Server的ODBC驅動程序11] [SQL Server]無效的列名稱'WILL'[message] => [Microsoft]服務器]列名'WILL'無效))

有誰知道我要去哪裏錯?

回答

0

在這個函數中,改變$params是這樣的數組:

function searchForRecordInUserTableUsername ($username, $connection){ 
$sql ="SELECT ID FROM UserTable WHERE Username=(?)"; 
$params = array($username); //CHANGE HERE 
$stmt = sqlsrv_query($connection, $sql, $params); 
if($stmt) { 
    while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC)) { 
     echo $row[0]; 
    } 
     sqlsrv_free_stmt($stmt); 
    } 
    else {die(print_r(sqlsrv_errors(), true)); } 
}