sqlsrv_num_rows()期望参数1是资源

时间:2017-07-04 12:40:53

标签: php html sql sqlsrv

我收到错误 - > 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 />";

        }
        ?>

2 个答案:

答案 0 :(得分: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注入攻击

答案 1 :(得分:0)

我在这里注意到两件事:

1)你在第4行有一个拼写错误,我想你错过了评论标记

而不是:

username and password sent from form
你的意思是:

// username and password sent from form

2)Mayank已经证明了第二个问题。您在SQL Query中有另一个错误,$ result变量返回FALSE而不是语句资源

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

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

查看this link了解详情。

最后请注意Mayank对SQL注入的看法。