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

Fai*_*een -4 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;
}
Run Code Online (Sandbox Code Playgroud)

Mad*_*iha 7

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

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

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

你正在使用Globals

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

function sortByMetal($conn) {
Run Code Online (Sandbox Code Playgroud)

你正在使用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;
}
Run Code Online (Sandbox Code Playgroud)

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