这个查询安全吗?

JD *_*cks 1 php security sql-injection

可能重复:
在PHP中停止SQL注入的最佳方法

我已经看到一些使用称为PDO的东西来使sql-infection或其他使用real_escape的查询安全的例子,但它们似乎都是不完整的或承担一些知识.所以我问,采取这个简单的更新查询,并使其从sql-injection安全.

function updateUserName($id,$first,$last)
{
    $qry = 'UPDATE user SET first = "'.$first.'", last = "'.$last.'" WHERE id = '.$id;
    mysql_query($qry) or die(mysql_error());
}
Run Code Online (Sandbox Code Playgroud)

Pas*_*TIN 8

基本上,你必须:

在您的具体情况下,这将是这样的:

$qry = 'UPDATE user SET first = "'
    . mysql_real_escape_string($first)
    . ' ", last = "'
    . mysql_real_escape_string($last)
    . '" WHERE id = '
    . intval($id);
Run Code Online (Sandbox Code Playgroud)

当然,这是考虑到last并且first是varchar,这id是一个整数.


作为旁注:当出现SQL错误(对于任何类型的错误也是如此)时,您不应该显示技术错误消息并让脚本死掉.

您的用户将无法理解该技术错误消息 - 他们不知道如何处理它,这不是他们的问题.

相反,您应该记录(例如,文件)技术错误消息,供您自己使用; 并向用户显示一个很好的"oops an error occurred"页面.