2017-07-04 66 views
0

我得到一個錯誤 - >sqlsrv_num_rows()預計參數1是資源
誰能弄清楚什麼是錯與編碼,香港專業教育學院一直在努力3小時,現在 由於事先:)sqlsrv_num_rows()預計參數1是資源

<?php 
include("config.php"); 

username and password sent from form 
$myusername=htmlspecialchars($_POST[username]); 
$mypassword=htmlspecialchars($_POST[password]); 



$sql="SELECT * FROM Login WHERE Username=$myusername and 
    Password=$mypassword"; 
    $result=sqlsrv_query($conn,$sql); 
    $count=sqlsrv_num_rows($result); 

    if($count==1){ 
    header("location: something"); 
    } 
else { 
    echo "Wrong Username or Password"; 



} 
?> 

CONFIG.PHP
<?php 
    $serverName = ''; 
    $uid = ''; 
    $pwd = ''; 
    $databaseName = ''; 
    $connectionInfo = array("UID"=>$uid,        
        "PWD"=>$pwd,        
        "Database"=>$databaseName); 

    $conn = sqlsrv_connect($serverName, $connectionInfo); 
     if($conn) { 
      echo "Connection established.<br />"; 
     }else{ 
       echo "Connection could not be established.<br />"; 

     } 
     ?> 
+0

'$ result'可能是錯誤的,這意味着你的查詢失敗了,如果這實際上是你的SQL查詢的話,這似乎很可能。 –

+0

可能重複的[SQLSRV \ _NUM \ _ROWS錯誤](https://stackoverflow.com/questions/22858327/sqlsrv-num-rows-error) – alalp

回答

1

sqlsrv_num_rows()預計參數1是資源

問題是$result是假的,這是因爲:

$sql="SELECT * FROM Login WHERE Username=$myusername and 
    Password=$mypassword"; 

這裏UsernamePassword是字符串,你用繩子把你比必須包裝在'燒毛引號中的值像:

$sql="SELECT * FROM Login WHERE Username='".$myusername."' and 
    Password='".$mypassword."'"; 

注:您的查詢很容易受到SQL注入

+0

OMG謝謝!我能做些什麼來防止sql注入? – Elo97234c

+0

選中此:https://stackoverflow.com/questions/16202006/prevention-of-sql-injection-with-php-for-sql-server-and-without-pdo –

0

我有通知2周這邊的事情:

1)您有4行一個錯字,我想你錯過了註釋標記

代替:

username and password sent from form 

你的意思是:

// username and password sent from form 

2)Mayank已經發現了第二個問題。您在SQL查詢中有另一個輸入錯誤,並且$ result變量返回FALSE而不是語句資源

您可以驗證是否檢查$ result是否等於FALSE,並且還會爲用戶輸出一些錯誤,如下所示:

if($result === false) { 
    die(print_r(sqlsrv_errors(), true)); 
} 

檢查this link瞭解更多信息。

最後介紹一下Mayank對SQL注入的看法。

相關問題