正确的查询格式

Right format for query

我正在制作一个测试程序,我需要在其中使用此代码:

"href=\"testmng.php?manageqn=" . htmlspecialchars_decode($r['testname'], ENT_QUOTES) . "?subjectname=". htmlspecialchars_decode($r['subname'], ENT_QUOTES)

我的问题是当 manageqnsubjectname 具有正确的值时什么是正确的格式:

else if ((isset($_REQUEST['manageqn'])) && (isset($_REQUEST['subjectname']))) {

$testname = $_REQUEST['manageqn'];
$subname = $_REQUEST['subjectname'];
$result = executeQuery("select testid from test where testname='" . htmlspecialchars($testname, ENT_QUOTES) . "';");

if ($r = mysql_fetch_array($result)) {
    $_SESSION['testname'] = $testname;
    $_SESSION['subjectname'] = $subname;
    $_SESSION['testqn'] = $r['testid'];

    header('Location: prepqn.php');
}
}

假设您正在使用 mysqli 连接到数据库,您需要使用 myqli_real_escape_string() PHP 函数对字符串进行转义,否则您可能会添加 sql 注入您的应用程序:

executeQuery("select testid from test where testname='" . myqli_real_escape_string($testname) . "';");

不过,我建议切换到参数化查询方法,使用 mysqli 提供的准备好的语句功能。然后你可以有这样的executeQuery()

executeQuery("select testid from test where testname=?", $testname)

无需转义字符串即可进行安全查询。

如果您使用的是已弃用的 mysql 驱动程序,那么您应该使用 mysql_real_escape_string().