我相信我的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)
虽然我没有看到语法错误,但我确实看到了其他一些非常重要的问题:
mysql_*功能.让我们解决其中的每一个:
不要使用全局变量,而是将您需要的参数作为参数传递给函数:
function sortByMetal($conn) {
Run Code Online (Sandbox Code Playgroud)
mysql_*函数请不要使用mysql_*新代码的功能.它们不再维护,社区已开始弃用过程.看到红色的盒子?相反,您应该了解准备好的语句并使用PDO或MySQLi.如果你无法决定,这篇文章将有助于选择.如果你想学习,这是一个很好的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)
它一次解决了所有这些问题.请花时间阅读我提供的链接,以了解我在此代码中所做的工作.