是否有必要在没有用户输入的情况下对 select 语句使用准备好的语句?

2024-04-21

在开始申请时,我会检查帐户状态。这是我在子域上提供应用程序时控制的内部检查。

我一直在用这个: // Retrieve account status for application $query = "SELECT `client_account_status` FROM `version_control` WHERE id = '1' ";

但是,当我适应准备好的语句时,我很好奇当没有用户输入要检查时这是否绝对必要?

$stmt = mysqli_stmt_init($link);
if (mysqli_stmt_prepare($stmt, 'SELECT client_account_status FROM version_control WHERE id = 1')) {

    mysqli_stmt_execute($stmt);
    mysqli_stmt_bind_result($stmt, $client_account_status);
    mysqli_stmt_fetch($stmt);
    mysqli_stmt_close($stmt);
}

必须的,没有。推荐,是的。但是,按照当前编写查询的方式,您无法从准备好的语句中获得任何好处。相反,它应该是:

mysqli_stmt_prepare($stmt, 
    'SELECT client_account_status FROM version_control WHERE id = ?'));

mysqli_stmt_bind_param($stmt, 'i', 1);
mysqli_stmt_execute($stmt);

你的初始版本的问题是mysql无法知道你的查询的哪一部分是参数,哪一部分是SQL语句。参数化查询的要点是将语句与参数清楚地分开。

See 如何防止 PHP 中的 SQL 注入? https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php有关防止 SQL 注入的更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有必要在没有用户输入的情况下对 select 语句使用准备好的语句? 的相关文章

随机推荐