-5

我相信我的 php 函数的语法一定有问题,但我不确定它是什么。谁能发现它?

function sortByMetal() {
    global $conn;

    $query = "SELECT * FROM necklaces WHERE metal_id = 1 AND color_id = 2";
    $result = mysql_query($query, $conn);

    $output = "";
    while ($necklaces = mysql_fetch_array($result)) {
            $output .= $necklaces['name'];
    }
    return $output;
}
4

4 回答 4

7

虽然我没有看到语法错误,但我确实看到了其他一些不那么重要的问题:

  1. 您正在使用全局变量。
  2. 你正在使用mysql_*函数。
  3. 您选择的数据超出了您的需要。

让我们解决其中的每一个问题:

您正在使用全局变量

不要使用全局变量,而是将您需要的作为参数传递给函数:

function sortByMetal($conn) {

您正在使用mysql_*函数

请不要将mysql_*函数用于新代码。它们不再被维护并且社区已经开始了弃用过程。看到红框了吗?相反,您应该了解准备好的语句并使用PDOMySQLi。如果你不能决定,这篇文章将有助于选择。如果你想学习,这里有很好的 PDO 教程

您选择的数据超出了您的需要

SELECT *如果您只打算使用name. 您可以使用SELECT `name`来仅选择您需要的数据。


了解了所有这些后,我想出了这个:

/**
 * @param PDO $conn
 *
 * @return string
 */
function sortByMetal(PDO $conn) {
    $query = <<<MySQL
SELECT `name`
  FROM `necklaces`
  WHERE `metal_id` = 1
    AND `color_id` = 2;
MySQL;
    $stmt = $conn->prepare($query);
    $stmt->execute();

    $result = "";
    while ($necklace = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $result .= $necklace['name'];
    }

    return $result;
}

一口气解决了所有这些问题。请务必花时间阅读我提供的链接,以了解我在此代码中所做的工作。

于 2012-06-16T19:18:24.720 回答
1

我唯一看到的(除了其他答案非常有效的点):你的输出字符串会很丑,因为你没有用空格分隔单词。

也许您可以使用 GROUP_CONCAT 使用不同的 sql 查询,因此您将立即获得一个不错的名称列表:

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

SELECT GROUP_CONCAT( necklaces.name )
FROM necklaces
WHERE metal_id = 1 AND color_id = 2
GROUP BY NULL; -- force group by
于 2012-06-16T19:23:09.893 回答
0

检查字段是否正确,或者全局变量是否正确。

于 2012-06-16T19:19:27.470 回答
0

假设您的表格和 $conn 设置正确,我看不到任何突出的东西。

首先在该行 mysql_error(); 之后添加该$result行,这应该显示任何 mysql 错误。

,$conn)此外,假设您已经操作了 mysql 数据库连接,您可能不需要mysql_query.

试试看,看看你会得到什么。

于 2012-06-16T19:17:21.443 回答