[英]How should I use mysql_query?
在下一个代码中,此函数存在一些问题:
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;
}
我在用它吗?
您需要在需要转义的字符串而不是整个查询上调用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'];
}
要回答您的问题,您使用的是错误的,您只想对输入而不是整个查询调用转义函数:
$user = mysql_real_escape_string($user);
也就是说,不建议使用mysql_*
函数,您应该使用PDO或MySQLi 。 这是使用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();
mysql_real_escape_string
在插入到SQL查询之前应该转义$user
,然后直接传递给mysql_query
。 这样做的目的是避免$_POST['user']
中带有撇号,否则可能导致查询混乱(因为您的用户值已经被它们包围了)。
例如,如果$_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
}
根据您对其他答案的评论:您正在使用POST
发送表单,而不是GET
对吗?
你没有看到任何东西,唯一的原因是你的if
没有得到满足的条件下,连接到你的PHP数据库或一个错误的问题(有错误抑制); 该脚本未到达您的print_r
语句。
我不确定,但是您可能还想在第一个if
语句中使用{}
并稍微清理一下代码:我建议使用isset()
而不是仅将字符串输入if
语句。
并检查您的错误日志。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.