高效和安全的查询理念 - MySQL


efficient and secure queries idea - mysql

假设,我想创建一个登录查询:

$query ="SELECT * FROM userstable WHERE uName='".$userName."' AND pass='".$password."' ";
$result = mysql_query($query);
$num =  mysql_numrows($result);
if ($num == 0) {
echo "wrong detiales";
}
else
{
echo "in";

但是通过这种方式,客户可以到达并将他的数据放入我的查询中......我不喜欢。。。为什么要授予客户端从我的数据库获取数据的访问权限?

问:将数据放在数组中,然后搜索数组而不是搜索查询是否健康?它可能会慢一点(假设我没有很多记录)。即使速度慢一点,也会更安全吗?

和建议? 代码示例?

10倍,(顺便说一句,我非常喜欢这个网站!

将我的数据放在数组中,然后搜索数组而不是搜索查询是否健康?

它将破坏数据库的整个用途。其主要目的是为您提供所需的唯一数据,在内部进行所有数据挖掘。这就是重点。

所以,这只是不可接受的解决方案。虽然安全,但它绝对效率低下且不可靠。

幸运的是,已经有一种正确的方法来运行查询安全 - 预准备语句。您可以在著名的问题中阅读它们,并从PDO标签wiki中获取更多实用细节

也就是说,你必须做到

$query = "SELECT 1 FROM userstable WHERE uName=? AND pass=?";
$stmt  = $pdo->prepare($query);
$stmt->execute(array($userName, $password));
$found = $stmt->fetchColumn();
if (!$found)
{
    echo "wrong detiales";
}
else
{
    echo "in";
}