安全$ _GET& mysql用法?

时间:2014-06-29 04:21:40

标签: php mysql

所以我试图用故事制作某种类型的页面

if(!empty($_GET['page']) && ctype_digit($_GET['page'])) {
    $id = mysql_escape_string($_GET['page']); //in case ctype_digit didnt work well.
    $pDatabase = Database::getInstance();
    $query = "SELECT * FROM stories WHERE id = '$id'";
    $result = $pDatabase->query($query) or die('Query failed: ' . mysql_error());
    if(mysql_num_rows($result) >0){
        //displaying current story
    }
    else {
        header('Location: ' . $_SERVER['HTTP_REFERER']);
    }
}
else {
    //Show all short stories
}

我想用这种方式确保使用$ _GET方法和mysql查询是完全安全的,如果不是请告诉我在这种情况下哪个更好。困扰我的另一件事是我一直使用查询,是不是或者我应该在推出网站之前预先读取所有数据库信息?我的意思是,如果我想在数据库中存储标签或网站标题怎么办?在每个页面加载中执行(mysql查询)标题和每个页面的标签会不会是错误的?

1 个答案:

答案 0 :(得分:2)

您不应该使用PHP内置的MySQL函数,因为它们已被弃用。使用 MySQLi PDO 并了解准备好的语句。我将首先指导您正确的方向。相信我,值得您花些时间来担心这一点,因为不使用预准备语句可能会增加SQL注入的机会。

MySQLi - http://php.net/manual/en/intro.mysqli.php

有关使用MySQLi准备好的语句的更多信息 - http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

PDO - http://www.php.net/manual/en/intro.pdo.php

有关使用PDO准备好的语句的更多信息 - http://www.php.net/manual/en/pdo.prepared-statements.php