我该如何使用mysql_query?

时间:2011-01-21 18:23:50

标签: php

我在下一段代码中遇到了这个函数的一些问题:

if(!($_SESSION['autenticado']))
    if($_POST["user"] && $_POST["pass"])
    {
        $user=$_POST["user"];
        $con=mysql_connect("localhost","root","3270");

            mysql_select_db("futbol",$con);
            $query = "SELECT us_pass FROM user WHERE us_nom = '$user'";
            print_r($query);
            mysql_real_escape_string($query);
            mysql_query($query)or die mysql_error();
            //print_r($pas);
            //$_SESSION["autenticado"]=1;
     }

我使用wrowng吗?

4 个答案:

答案 0 :(得分:7)

您需要在需要转义的字符串上调用mysql_real_escape_string,而不是整个查询:

$user = mysql_real_escape_string($user);
$query = "SELECT us_pass FROM user WHERE us_nom = '$user'";

附录:如果您只是在探索PHP的数据库集成,我建议您查看PDO,这是处理数据库操作的一种更为复杂和安全的方法。


另请注意,您实际上并未使用mysql_query执行任何操作。这将返回一个资源,然后您可以使用该资源来获取信息。例如,要获取返回的密码,请使用以下命令:

$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
    $password = $row['us_pass'];
}

答案 1 :(得分:5)

要回答你的问题,你使用的是错误的,你只想在输入上调用转义函数,而不是整个查询:

$user = mysql_real_escape_string($user);

也就是说,mysql_*函数已被弃用,您应该使用PDOMySQLi。以下是使用PDO的更好方法的示例:

$con = new PDO('mysql:dbname=futbol;host=127.0.0.1', 'root', '3270');
$stmt = $con->prepare('SELECT us_pass FROM user WHERE us_nom = :user');
$stmt->execute(array('user' => $user));
$result = $stmt->fetchAll();

答案 2 :(得分:2)

mysql_real_escape_string在插入SQL查询之前应该转义$user,然后直接传递给mysql_query。这样做的目的是避免$_POST['user']在其中包含撇号,否则会破坏查询(因为您的用户值已经包含在其中。

e.g。如果$_POST['user']joe'bob作为值,则您的查询将变为:

SELECT us_pass FROM user WHERE us_nom = 'joe'bob'

然后,您可以看到流浪撇号如何提出问题。

相反,请尝试以下方法:

if(!($_SESSION['autenticado']))
  if($_POST["user"] && $_POST["pass"])
  {
    $con=mysql_connect("localhost","root","3270");
    $user=mysql_real_escape_string($_POST["user"]); // escape your value here (and move below connection)

    mysql_select_db("futbol",$con);
    $query = "SELECT us_pass FROM user WHERE us_nom = '$user'";
    print_r($query);
    mysql_query($query) or die mysql_error();
    //print_r($pas);
    //$_SESSION["autenticado"]=1;

    // here you would mysql_fetch_array/result/etc. and get what
    // was returned from the database
 }

答案 3 :(得分:1)

根据您对其他答案的评论:您是使用POST而不是GET发送表单吗?

您没有看到任何内容的唯一原因是您的if条件未得到满足,连接到数据库的问题或您的php中的错误(错误被抑制);该脚本未达到您的print_r声明。

我不确定,但您也可能希望{}用于您的第一个if语句并稍微清理您的代码:我建议使用isset()代替只是将字符串输入if语句。

并检查错误日志。