我的php功能出了什么问题?

时间:2012-06-16 19:12:14

标签: php

我相信我的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 个答案:

答案 0 :(得分:7)

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

  1. 你正在使用全局变量。
  2. 您正在使用mysql_*个功能。
  3. 您选择的数据超出了您的需求。
  4. 让我们解决其中的每一个:

    您正在使用Globals

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

    function sortByMetal($conn) {
    

    您正在使用mysql_*功能

    请不要将mysql_*函数用于新代码。它们已不再维护,社区已开始deprecation process。请参阅red box?相反,您应该了解prepared statements并使用PDOMySQLi。如果您无法决定,this article将有助于选择。如果您想学习,here is good PDO tutorial

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

    如果您只打算使用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;
    }
    

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

答案 1 :(得分: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

答案 2 :(得分:0)

假设你的表和$ conn设置正确,我没有看到任何突出的东西。

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

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

试一试,看看你得到了什么。

答案 3 :(得分:0)

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