php - 如果在查询中不考虑用户输入,使用 mysqli_query() 是否危险?

标签 php mysql

每当我想运行 MySQL 查询时,我都会准备语句:

$query = "SELECT * FROM users WHERE name = ?";
$stmt = mysqli_stmt_init($con);
$stmt->prepare($query);
$stmt->bind_param('s', $_POST['user']);
$stmt->execute();
$result = $stmt->get_result();
$assoc = mysqli_fetch_assoc($result);

但是,如果我根本不接受用户的任何信息怎么办?这是:

$query = "SELECT * FROM users";
$stmt = mysqli_stmt_init($con);
$stmt->prepare($query);
$stmt->execute();
$result = $stmt->get_result();
$assoc = mysqli_fetch_assoc($result);

与以下一样安全:

$assoc = mysqli_fetch_assoc(mysqli_query($con, "SELECT * FROM users"));

请记住,用户在创建帐户时可能仍然输入了 SQLi 语句,现在我在没有准备的情况下选择了它。

如果我只是选择一个只存储数字的列(数据类型是 double )怎么办:

$assoc = mysqli_fetch_array(mysqli_query($con, "SELECT version FROM users ORDER BY version LIMIT 1"))[0];

最佳答案

通常,使用 PDO 绑定(bind)变量是实现一致的、我不必考虑注入(inject)开发的最佳方法。

当您完全控制查询时,除了让自己习惯性地随时接触良好实践外,没有理由需要准备它。

作为旁注,我会避免在任何生产代码中使用 * 并明确指定您想要的字段。

我会清理您当前的用户输入数据,以避免对过去可能输入的内容产生任何担忧。

关于php - 如果在查询中不考虑用户输入,使用 mysqli_query() 是否危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28922271/

相关文章:

MySQL存储过程初学者错误

php - 如何查询数据库的中间值并按最接近的排序?

php - 在 php 中使用 PDO bindValue 插入

php - 在数据源默认值中找不到模型的 cakephp 表

mysql - 从mysql中的函数获取结果

未创建 MySQL 二进制日志文件 - Windows XP

mysql在不同条件下从另一个表连接列

PHP MySQL WHERE 子句列名错误

php - 可以通过 FTP 编辑/更新 WordPress 主题文件吗?

php - Symfony2命令行生成全局文件夹下的twig模板