【问题标题】:Right format for query查询的正确格式
【发布时间】:2015-06-23 05:41:55
【问题描述】:

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

"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');
}
}

【问题讨论】:

  • 问题标题中的“2 个会话”对您尝试使用的代码有影响吗?

标签: php html href


【解决方案1】:

假设您使用 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()

【讨论】:

    猜你喜欢
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    相关资源
    最近更新 更多