2017-11-30 5 views
0

私のすべてのAPIで同じ問題が発生します.. echo sqlsrv_query();レスポンスResource id#3を返す。 また、返されたデータが空であるかどうかを調べる方法はありません。 リソースID#3の応答が原因で、クエリデータが邪魔になる可能性があります。 助けてください。MSSqlは、echo sqlsrv_query()でリソースID#3の応答のみを返します。

以下は私のコードです。

あなたがその sqlsrv_queryリターンを見つけることができます read the documentation
<?php 
// the connection part of the code....... 
$connectionInfo = array( 
    "UID"=>$uid,"PWD"=>$pwd,"Database"=>$databaseName,"CharacterSet" => "UTF-8"); 

/* Connect using SQL Server Authentication. */  
$conn = sqlsrv_connect($serverName, $connectionInfo); 
if($conn === false) { 
die(print_r(sqlsrv_errors(), true)); 
} 

$username= $_REQUEST['username']; 
$password= $_REQUEST['password']; 

if($username && $password) 
{ 
    $query = "SELECT NAME,LOGINID,PASSWORD FROM SMS_ACCESS WHERE LOGINID = '$username' AND PASSWORD = '$password'"; 
    /* Execute the query. */  
    $stmt = sqlsrv_query($conn,$query);  
    $json = array(); 

    echo $stmt; 

    if ($stmt === false)  
    {  
     $json["status_code"] = "203"; 
     $json["status"] = "Error in execution"; 
      //echo "Error in statement execution.\n";  
     die(print_r(sqlsrv_errors(), true));  
     echo json_encode(['data'=>[$json]]); 
    }  
    else  
    {  
     while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) 
     { 
      $json["name"] = $row['0']; 
     } 
      //echo json_encode(['status_code' => "200",'status' => "success",'data'=>[$json],'Msg' => "Login Successful !!"]); 
    }  
} 
else { 
    $json["status_code"] = "203"; 
    $json["status"] = "Parameter Missing !!"; 
    die(print_r(sqlsrv_errors(), true)); 
    echo json_encode(['data'=>[$json]]); 
} 

/* Free statement and connection resources. */  
sqlsrv_free_stmt($stmt);  
sqlsrv_close($conn);  
?> 
+1

あなたは、プレーンテキストとしてパスワードを格納していますか? –

+0

pwdは暗号化されていません。 – Shivani

+1

@MattGibson私は何かを忘れていることを知っていました! – miken32

答えて

1

あなたの場合、「エラーが発生した場合、成功とFALSE上のステートメントリソースを。」リソースを印刷することはできませんので、この動作が必要です。

次に、JSONを実際に出力していないため、APIに問題がある理由が説明されています。 dieはすぐにプログラムの実行を停止します。

JSONを出力している場合は、wrong content typeで送信していて、矛盾した形式で送信しています。エラー条件はstatusstatus_codedata要素内にありますが、成功はありません。

連想配列としてfetching your database queryですが、数字のインデックスを使用して列の値を取得しようとしています。また、単一行しか取得していない場合は、結果をループする必要はありません。

最後に、ユーザー提供のデータを暗黙のうちにクエリに挿入することにより、自分自身をSQL injectionまで開きます。これは非常に悪い考えで、誰もが認証なしでログインできるようにします。

ではなく、このような何かを試してみてください:

<?php 
$connectionInfo = [ 
    "UID"   => $uid, 
    "PWD"   => $pwd, 
    "Database"  => $databaseName, 
    "CharacterSet" => "UTF-8", 
]; 

$conn = sqlsrv_connect($serverName, $connectionInfo); 
if ($conn === false) { 
    $data = [ 
     "status_code" => "203", 
     "status"  => "Database error", 
    ]; 
    header("Content-Type: application/json"); 
    echo json_encode($data); 
    exit; 
} 

$username= $_REQUEST['username']; 
$password= $_REQUEST['password']; 

if(empty($username) || empty($password)) { 
    $data = [ 
     "status_code" => "203", 
     "status"  => "Parameter Missing !!", 
    ]; 
    header("Content-Type: application/json"); 
    echo json_encode($data); 
    exit; 
} 

$query = "SELECT NAME FROM SMS_ACCESS WHERE LOGINID = ? AND PASSWORD = ?"; 
$parameters = [$username, $password]; 
$stmt = sqlsrv_query($conn, $query, $parameters); 
if ($stmt === false) {  
    $data = [ 
     "status_code" => "203", 
     "status"  => "Error in execution", 
    ]; 
    header("Content-Type: application/json"); 
    echo json_encode($data); 
    exit; 
} 
$row = sqlsrv_fetch_array($stmt); 
$data = [ 
    "status_code" => "200", 
    "status"  => "success", 
    "data"  => [ 
     "name" => $row[0] 
    ], 
]; 
header("Content-Type: application/json"); 
echo json_encode($data); 

sqlsrv_free_stmt($stmt);  
sqlsrv_close($conn); 
+0

ちょっとこんにちはこんにちはこんにちはこんにちは。あなたの助けにはうってつけです。しかし、ユーザー名やpwdの間違った値を入力しても、失敗の代わりに成功しています。 – Shivani

+0

wanaはpwdかユーザー名が一致するかどうかを確認します。彼らがそうでない場合、APIは応答として失敗を返すべきです... – Shivani

+0

したがって、空の結果セットを確認してください。行の数を見てください。 – miken32

関連する問題