【发布时间】:2025-12-31 21:50:01
【问题描述】:
我是一名前端开发人员,请为可怕的 PHP 和 SQL 怜悯我的灵魂,我是来学习的!
所以,我有几个表格,我们称它们为“类别”和“帖子”
我的“类别”表有这些字段:
- 类别ID
- 类别名称
- 类别显示名称
我的“帖子”表有以下字段:
- postID
- 帖子标题
- postCategoryID
- otherNoneImportantFields
我可以非常简单地输出我所有的类别:
$getCategories = mysql_query("SELECT categoryID, name, displayName
FROM jobCategories
ORDER BY categoryID ASC");
$numberOfCategories = mysql_num_rows($getCategories);
然后我可以做一个while循环并输出所有类别:
if ($numberOfCategories > 0) {
while($row = mysql_fetch_array($getCategories)) {
$categoryID = $row['categoryID'];
$name = $row['name'];
$displayName = $row['displayName'];
echo "<li>" . $displayName . "</li>";
// I'm using the other variables to create a link
}
}
现在,问题是: 我想要一个 while 循环中的变量,它是具有该 categoryID 的所有帖子的计数。我不确定是否可以进行子查询,或者是否必须进行连接才能使该变量输出。
作为第二个问题,有问题的 PHP 是健全的,还是错过了一种更简单/更清洁的方式来做我正在做的事情?
提前致谢:)
【问题讨论】:
-
请stop using
mysql_*functions。它们不再被维护并且是officially deprecated。改为了解 prepared statements,并考虑使用 PDO,it's not as hard as you think。 -
@Jay:虽然不应该使用 mysql_ 函数编写新代码,但您为什么认为 OP 可以选择使用其他东西?为什么使用准备好的语句和 PDO 是唯一的选择?
-
我不假设任何事情,我要求他们“考虑”使用 PDO @symcbean。 ¯\_(ツ)_/¯ 无论您选择用于数据库操作的新 API 为何,都应使用准备好的语句,因为它们有助于大大减少 risk for SQL Injection.
-
很抱歉甚至不知道 PDO。我会尽我所能去研究它,看看我是否可以首先重写简单的东西。感谢您的提醒。
-
@JayBlanchard 您会很高兴知道我现在正在使用 PDO - 您的网站对入门很有帮助。现在看不到一个 mysql_* 函数。
标签: php mysql count categories