我该如何使用mysql_query?

And*_*tín 0 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;
     }
Run Code Online (Sandbox Code Playgroud)

我用它了吗?

lon*_*day 7

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

$user = mysql_real_escape_string($user);
$query = "SELECT us_pass FROM user WHERE us_nom = '$user'";
Run Code Online (Sandbox Code Playgroud)

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


另请注意,您实际上并没有做任何事情mysql_query.这将返回一个资源,然后您可以使用该资源来获取信息.例如,要获取返回的密码,请使用以下命令:

$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
    $password = $row['us_pass'];
}
Run Code Online (Sandbox Code Playgroud)


mfo*_*nda 5

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

$user = mysql_real_escape_string($user);
Run Code Online (Sandbox Code Playgroud)

也就是说,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();
Run Code Online (Sandbox Code Playgroud)