php - 在 PHP 中使用 SELECT 仅显示单行中的一个值的最安全、最正确的解决方案是什么?

标签 php mysql sql

我的问题是,当您只想从 MySQL 数据库行中检索一个值时,您认为最好使用哪种解决方案。

例如,假设我们有以下内容:

-table "users" 包含三行 "username","password"和 "status" 以及三个用户 "user1","user2"和 "user3".

如果我只想选择一个用户的状态(假设是 user1)并将其设置为变量,我将使用:

$user_status = mysql_result(mysql_query("SELECT status FROM users WHERE username='user1'"),0);

我在网上搜索,发现人们使用不同的方法来检索此类信息,例如在选择代码中设置 LIMIT 1 或检索整个用户列表,然后对符合他们需求的列表进行排序。

我想知道我的解决方案是否是最好、最安全的方法(包括 SQL 注入(inject)的安全性,请记住 php 代码中没有使用 $_GET 方法)。

也许可以同时使用LIMIT 1和我上面使用的方法(代码需要更少的资源和时间来执行)?

最佳答案

从数据库的角度来看,最安全的方法是在您选择的表中拥有一个唯一键,并通过该键检索行。在您的示例中,您可以有一个 userID 列,其中包含每个用户的唯一 ID。如果您查询 WHERE userID='...',数据库将保证只有一个结果行。

编辑:“舆论”建议我添加两件事。

  1. 你不应该使用mysql_*!为什么不使用 mysqli ?您不必担心its performance .
  2. 如果您使用正确的数据库设计,则没有理由使用LIMIT 1 - 根本没有理由。这有点像编写 Enter car 的代码;确保您输入的是一辆车;LIMIT 可用于其他情况,例如检索许多结果中的前 10 个结果。

关于php - 在 PHP 中使用 SELECT 仅显示单行中的一个值的最安全、最正确的解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21406020/

相关文章:

SQL 不返回正确的值

php - 创建具有多个数据库表的 json API

php - 在循环中插入评论模板

用于分组依据/排序依据的 MySQL 索引

python - 使用右连接和 WHERE IN 子句

java - 运行 M :N query in hibernate? 的最佳方式

php - 优化昂贵的 php 查询/子查询

PHP 二进制数据 - 不依赖于机器

mysql - SQL 无法添加或更新子行 : a foreign key constraint fails

sql - 使用 SQLite 数据库作为后端,前端使用 MS Access,超过 2 演出数据