php查询不起作用

时间:2012-05-09 04:59:33

标签: php mysql

我正在尝试创建一个用户登录表单,它会发出警告,这是我的所有脚本

conncect.php

<?php

$con = mysql_connect("localhost" , "xxx" , "xxxxxx");
if(!$con)
{
    die('Could Not Connect' . mysql_error());
}
else
{
    echo "User Connect". "<br>";
}
mysql_select_db("xxxx" , $con)
or die('Error: could not connect' . mysql_error());

echo "Database connected" . "<br>";


function dbQuery($sql)
{
    return mysql_query($sql) or die('Query Failed. ' . mysql_error());
}

function dbAffectedRows()
{
    global $dbConn;
    return mysql_affected_rows($dbConn);
}

function dbFetchArray($result, $resultType = MYSQL_NUM)
{
    return mysql_fetch_array($result, $resultType);
}
function dbFetchAssoc($result)
{
    return mysql_fetch_assoc($result);
}
function dbFetchRow($result)
{
    return mysql_fetch_row($result);
}
function dbFreeResult($result)
{
    return mysql_free_result($result);
}
function dbNumRows($result)
{
    return mysql_num_rows($result);
}
function dbSelect($dbName)
{
    return mysql_select_db($dbName);
}

?>

function.php

<?php
require_once 'connect.php';
    $userName = $_POST['txtUserName'];
    $password = $_POST['txtPassword'];

//$sql = mysql_query("SELECT user_id FROM user WHERE user_name = '$userName' AND user_password = '$password'") or die('error in query!' . mysql_error()); 
$sql = "SELECT user_id FROM user WHERE user_name = '$userName' AND user_password = '$password'"; 


echo $result = dbQuery($sql);

    if(dbNumRows($result)==1){
        $row = dbFatchAssoc($result);
        echo '$row[user_id]';
        }

?>

它在connect.php中发出警告,这是下面的

  

警告:mysql_num_rows()要求参数1为resource,boolean   在connect.php中给出

有人请帮助我,提前谢谢

我添加整个警告表看看

(!)警告:mysql_num_rows()要求参数1为资源,布尔值在第48行的C:\ wamp \ www \ tb_ad \ connect.php中给出 调用堆栈

#   Time    Memory  Function    Location
1   0.0032  367408  {main}( )   ..\function.php:0
2   0.0130  385640  dbNumRows( )    ..\function.php:15
3   0.0130  385672  mysql_num_rows ( )  ..\connect.php:48

2 个答案:

答案 0 :(得分:2)

这里遗漏了两件事; 1)参数消毒和2)错误检查。

如果不将您的应用转换为PDO(您 应该这样做),请尝试以下

$sql = sprintf("SELECT user_id FROM user WHERE user_name = '%s' AND user_password = '%s'",
    mysql_real_escape_string($_POST['txtUserName']),
    mysql_real_escape_string($_POST['txtPassword']));
$result = mysql_query($sql);
if ($result === false) {
    throw new Exception(mysql_error());
}

您还应该检查

  • 如果请求方法为POST
  • 如果在txtUserName
  • 中设置了txtPassword$_POST

对于开发,我还建议将它放在脚本的顶部(或者最好在php.ini中设置它们)

ini_set('display_errors', 'On');
error_reporting(E_ALL);

此外,存储纯文本密码是教科书不好。我建议你做一些关于软件应用程序安全性的阅读。这是一个起点 - https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project

答案 1 :(得分:1)

如果查询的执行不成功,则此行echo $result = dbQuery($sql);返回FALSE。

所以你应该添加如下内容:

if (!$result)
{
    //handle the error
}