【问题标题】:Using $variable in PHP MySQL LIMIT在 PHP MySQL LIMIT 中使用 $variable
【发布时间】:2017-03-31 14:46:42
【问题描述】:

这是我当前在 php 脚本中使用的代码。

$prodid = $_GET['id'];
$query = mysql_query("SELECT * FROM table1 WHERE productid = '$prodid' 
ORDER by amount DESC LIMIT 3");

我已将 LIMIT 设置为 3。但我想定义类似 '$count' 的值,并且应该从 MySQL 查询中获取 $count 的值,即

$count = mysql_query("SELECT count FROM table1 WHERE productid = '$prodid'");

LIMIT 必须根据“$prodid”而改变。像这样,

mysql_query("SELECT * FROM table1 WHERE productid = '$prodid' 
ORDER by amount DESC LIMIT '$count'");

【问题讨论】:

  • 不是总是productid = x 的记录数吗?如果 count 等于 10,然后您执行相同的查询限制 10,为什么要使用它?如果您指定限制,它将是 10 条记录。
  • 首先,您使用的是 mysql_ - 一个已弃用、不安全的数据库处理程序。使用 mysqli_ 或 PDO。其次,您直接从 URL 中获取用户定义的变量,并将其放入查询中。使用 mysql_query。你想删除你的数据库吗?让我说明一下:imgs.xkcd.com/comics/exploits_of_a_mom.png
  • LIMIT '$count' => LIMIT $count。并确保它是一个整数。
  • 听上面的mkaatman...这里有逻辑错误;当现实是您想要无论如何都会返回的所有内容时,我无法想出任何理由在此查询中添加限制语句...

标签: php mysql mysqli limit offset


【解决方案1】:

一些事情。

首先,您正在使用此查询来查找要获取的行数。

 "SELECT count FROM table1 WHERE productid = '$prodid'"

应该说

 "SELECT COUNT(*) FROM table1 WHERE productid = '$prodid'"

为了获得行数。

而且,应该说

 "SELECT COUNT(*) FROM table1 WHERE productid = " . intval($prodid) 

为了避免 sql 注入(假设您的 prodid 值是整数)。

第二,上面的查询返回一个单行结果集。您需要实际阅读该行。我不会告诉你如何使用mysql_ 来做到这一点,因为现在只有傻瓜使用mysql_请使用PDOmysqli_

第三,这个查询

"SELECT * FROM table1 WHERE productid = " . intval($prodid) . " ORDER by amount DESC"

总是 返回您之前的查询想要的行数。因此,在您给出的示例中,您的 LIMIT 子句完全没有必要。

【讨论】:

  • 很好!如果 count 是 table1 中的列名,并且每个 productid 有不同的计数值,例如,对于 productid = 1,计数为 3,对于 prodcutid = 2,计数为 6,如果 $ prodid = 1,同样,如果 $prodid = 2 则有 6 个结果。如何查询?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 2012-05-14
相关资源
最近更新 更多