sqlsrv_num_rows() 期望参数 1 是资源

sqlsrv_num_rows() expects parameter 1 to be resource

我得到一个错误 --> sqlsrv_num_rows() 期望参数 1 是资源
谁能弄清楚编码有什么问题,我已经尝试了 3 个小时了 提前致谢:)

<?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 />";

        }
        ?>

sqlsrv_num_rows() expects parameter 1 to be resource

问题 $result 是错误的,这是因为:

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

这里 UsernamePassword 是字符串,要与字符串进行比较,您必须将值用 ' 单引号括起来,例如:

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

注意:您的查询容易受到 sql 注入

我在这里注意到两件事:

1) 你在第 4 行打错了,我想你错过了注释标记

而不是:

username and password sent from form

你的意思是:

// username and password sent from form

2) Mayank 已经回答了第二个问题。您在 SQL 查询中还有一个错字,并且 $result 变量返回 FALSE 而不是语句 resource

您可以验证检查 $result 是否等于 FALSE,并进一步为用户打印一些错误,如下所示:

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

查看 this link 了解更多信息。

最后请注意 Mayank 关于 SQL 注入的说法。