我相信我的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;
}
答案 0 :(得分:7)
虽然我没有看到语法错误,但我确实看到了其他一些不太重要的问题:
mysql_*
个功能。让我们解决其中的每一个:
不要使用全局变量,而是将您需要的参数作为参数传递给函数:
function sortByMetal($conn) {
mysql_*
功能请不要将mysql_*
函数用于新代码。它们已不再维护,社区已开始deprecation process。请参阅red box?相反,您应该了解prepared statements并使用PDO或MySQLi。如果您无法决定,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)
检查字段是否正确,或者全局变量是否正确。