Php sqlsrv_num_rows()希望参数1是资源

Php sqlsrv_num_rows()希望参数1是资源,php,html,sql,sqlsrv,Php,Html,Sql,Sqlsrv,我得到一个错误->sqlsrv\u num\u rows期望参数1是资源 有人能找出编码的错误吗?我已经试了三个小时了 提前感谢: <?php include("config.php"); username and password sent from form $myusername=htmlspecialchars($_POST[username]); $mypassword=htmlspecialchars($_POST[password]); $sql="SE

我得到一个错误->sqlsrv\u num\u 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 sqlsrv_num_rows期望参数1是资源

问题是$result为false,原因是:

$sql="SELECT * FROM Login WHERE Username=$myusername and 
  Password=$mypassword";
此处用户名和密码是字符串,要与字符串进行比较,必须将值用单引号括起来,如:

$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,而不是语句资源

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

if( $result === false ) {
     die( print_r( sqlsrv_errors(), true));
}
查看更多信息


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

$result可能是false,这意味着您的查询失败,如果这是您的SQL查询,则很可能失败。OMG可能重复,谢谢!如何防止sql注入?请检查以下内容:
if( $result === false ) {
     die( print_r( sqlsrv_errors(), true));
}