今天非常坑,就用写博客来发泄吧。。。
<html>
<form action="./sql.php" method="get">
账号<input type = "text" name = "u"><br>
密码<input type = "text" name = "p"><br>
<input type = "submit" value = "登录">
</form>
</html>
<?php
header('Content-Type:text/html;charset=utf-8');
include('./connect.php'); //引入数据库配置文件
$username = $_GET['u'];
$password = $_GET['p'];
echo $username.$password."<br>";
$sql = "select username,password from user where password = '$password'";
//$sql = "select username,password from user where 1=2";
echo $sql."<hr>";
$select_sql_result = mysql_query($sql);
var_dump($select_sql_result);
echo "<br>";
if(!$select_sql_result)
echo "wrong"."<br>";
else echo "success!!!"."<br>";
while($res=mysql_fetch_assoc($select_sql_result)){
foreach($res as $key=>$value){
echo $key.":".$value.'<br />';
}
}
?>
先分析一下mysql_query
mysql_query() 函数执行一条 MySQL 查询。
语法
mysql_query(query,connection)
参数 | 描述 |
---|---|
query | 必需。规定要发送的 SQL 查询。注释:查询字符串不应以分号结束。 |
connection | 可选。规定 SQL 连接标识符。如果未规定,则使用上一个打开的连接。 |
说明
如果没有打开的连接,本函数会尝试无参数调用 mysql_connect() 函数来建立一个连接并使用之。
返回值
mysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。
对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。
非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明任何有关影响到的或返回的行数。很有可能一条查询执行成功了但并未影响到或并未返回任何行。
运行代码之后发现if(!$select_sql_result)总是对的,无论你输入什么,而且mysql_query()返回的总是资源类型,除非sql语句不合语法,它才会返回FLASE,看到上面的绿色部分,即使mysql_query()执行成功,也可能不会返回结果,也就是查询结构为空,如下图,但是它不是bool FALSE 这种情况它只会返回资源类型
想要对查询结果进行判断是否为空,可以用mysql_num_rows()和mysql_affected_rows()
1.)mysql_num_rows() 函数返回结果集中行的数目。
语法
mysql_num_rows(data)
参数 | 描述 |
---|---|
data | 必需。结果集。该结果集从 mysql_query() 的调用中得到。 |
说明
mysql_num_rows() 返回结果集中行的数目。此命令仅对 SELECT 语句有效。要取得被 INSERT,UPDATE 或者 DELETE 查询所影响到的行的数目,用 mysql_affected_rows()。
2.)
mysql_affected_rows() 函数返回前一次 MySQL 操作所影响的记录行数。
语法
mysql_affected_rows(link_identifier)
参数 | 描述 |
---|---|
link_identifier | 必需。MySQL 的连接标识符。如果没有指定,默认使用最后被 mysql_connect() 打开的连接。如果没有找到该连接,函数会尝试调用 mysql_connect() 建立连接并使用它。如果发生意外,没有找到连接或无法建立连接,系统发出 E_WARNING 级别的警告信息。 |
说明
取得最近一次与 link_identifier 关联的 INSERT,UPDATE 或 DELETE 查询所影响的记录行数。
所以代码可以改为
<html>
<form action="./sql.php" method="get">
账号<input type = "text" name = "u"><br>
密码<input type = "text" name = "p"><br>
<input type = "submit" value = "登录">
</form>
</html>
<?php
header('Content-Type:text/html;charset=utf-8');
include('./connect.php'); //引入数据库配置文件
$username = $_GET['u'];
$password = $_GET['p'];
echo $username.$password."<br>";
$sql = "select username,password from user where password = '$password'";
// $sql = "select username,password from user where 1=2";
echo $sql."<hr>";
$select_sql_result = mysql_query($sql);
var_dump($select_sql_result);
echo "<br>";
if(mysql_num_rows($select_sql_result)===0)
echo "wrong";
/*if(!$select_sql_result)
echo "wrong"."<br>";*/
else echo "success!!!"."<br>";
while($res=mysql_fetch_assoc($select_sql_result)){
foreach($res as $key=>$value){
echo $key.":".$value.'<br />';
}
}
?>
真是心累。。。。。