在php函数中使用参数似乎已经破坏了我的mysql查询

时间:2016-12-28 11:51:53

标签: php mysql

编辑:这是关于范围的重复关闭,但问题实际上是关于我在SQL查询中使用(或缺少)撇号。范围不正确,但不是导致我的问题的原因。我很高兴删除或重新打开解决方案。

以下代码工作正常,并显示一个漂亮的HTML表:

$link = mysqli_connect($host, $username, $password, $db_name);
$round = 1;
$result = mysqli_query($link,"SELECT car.carID, car.team, result.cost FROM result INNER JOIN car ON car.carID=result.carID WHERE result.roundID=$round AND car.class='LMP1'");

echo "<h1>" . 'LMP1' . "</h1>
<table border='1'>
<tr>
<th>Car</th>
<th>Team</th>
<th>Cost</th>
</tr>";

while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['carID'] . "</td>";
echo "<td>" . $row['team'] . "</td>";
echo "<td>" . $row['cost'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($link);

但是当我将它包装在一个函数中时,我得到了表头并没有数据:

function displayClassCosts($class) {
    $link = mysqli_connect($host, $username, $password, $db_name);
    $round = 1;
    $result = mysqli_query($link,"SELECT car.carID, car.team, result.cost FROM result INNER JOIN car ON car.carID=result.carID WHERE result.roundID=$round AND car.class=$class");

    echo "<h1>" . $class . "</h1>
    <table border='1'>
    <tr>
    <th>Car</th>
    <th>Team</th>
    <th>Cost</th>
    </tr>";

    while($row = mysqli_fetch_array($result))
    {
    echo "<tr>";
    echo "<td>" . $row['carID'] . "</td>";
    echo "<td>" . $row['team'] . "</td>";
    echo "<td>" . $row['cost'] . "</td>";
    echo "</tr>";
    }
    echo "</table>";
    mysqli_close($link);
}

displayClassCosts('LMP1');
displayClassCosts('LMP2');
displayClassCosts('GTE_Pro');
displayClassCosts('GTE_Am');

唯一的区别是查询条件中的硬编码字符串和第一个版本中的H1标记与使用传递的变量。

欢迎提示!

1 个答案:

答案 0 :(得分:0)

当包含在函数中时,您将从何处获取数据库连接的变量$host, $username, $password, $db_name

您可以在函数中使用global关键字来使用这些变量。

function displayClassCosts($class) {
    global $host, $username, $password, $db_name;
    .
    .
}

另一种方法是将它们作为参数传递。

function displayClassCosts($class, $host, $username, $password, $db_name) {
    .
    .
}