0

我正在尝试从数据库中获取简单信息并将其回显到屏幕上,但这对我不起作用。

$con=mysqli_connect("SERVER.COM","USERNAME","PASSWORD", "DATABASE");

function GetTeamFixtures($team)
{
    $queryget = mysqli_query($con, "SELECT * FROM 'mlsfixtures' WHERE team='$team' LIMIT 1");
    $row = mysqli_fetch_assoc($queryget);
    $gw1 = $row['gw1'];
    $gw2 = $row['gw2'];

    echo $team.' '.$gw1.' '.$gw2.'<br>';
}

$team = "Chicago Fire"; GetTeamFixtures($team);
$team = "Chivas USA"; GetTeamFixtures($team);
$team = "Colorado Rapids"; GetTeamFixtures($team);
//continue for all teams - removed for simplicity

这是我收到的错误消息(第 46 行是 $queryget= one,第 49 行是 $row = one)。

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in server.com\teamfix.php on line 46

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in server.com\teamfix.php on line 49

知道为什么吗?我不确定是否有更简单的方法来做同样的事情,但对于 19 个不同的团队。

4

5 回答 5

2

除了解释连接的两个用户之外,我发现的错误之一是单引号的无效使用。

表名不应该用单引号括起来,因为它们是标识符而不是字符串文字。删除单引号,它应该可以工作,

SELECT * FROM mlsfixtures WHERE team='$team' LIMIT 1

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-04-12T03:05:25.837 回答
1

访问函数外部变量而不是使用的另一种方法global variables是将其添加到其参数中

例如

function GetTeamFixtures($team,$con)
{
   // query inside
}

也如J W您的查询中所说,删除“”或用“反引号”替换它。

于 2013-04-12T03:10:28.597 回答
1

(这是我以简洁的方式组合所有其他答案的尝试。)

有两个问题。

首先,如果没有语句$con,则无法从函数中访问全局变量。该语句可用于在您的函数中创建对from 的引用。globalglobal$con

global $con; // is equivalent to:
$con =& $GLOBALS['con'];

其次,表名不能用单引号括起来。删除引号。

// By the way, this should be using mysqli::prepare and mysqli_stmt::bind_param
// to prevent SQL injection
$queryget = mysqli_query($con, "SELECT * FROM mlsfixtures WHERE team='$team' LIMIT 1");
于 2013-04-12T03:21:25.080 回答
0

您无权$con从您的功能中访问。这应该有效:

$con = mysqli_connect("SERVER.COM","USERNAME","PASSWORD", "DATABASE");

function GetTeamFixtures($team)
{
    global $con;
    $queryget = mysqli_query($con, "SELECT * FROM `mlsfixtures` WHERE `team`='$team' LIMIT 1");
    $row = mysqli_fetch_assoc($queryget);
    $gw1 = $row['gw1'];
    $gw2 = $row['gw2'];

    echo $team.' '.$gw1.' '.$gw2.'<br>';
}

PS如果$team你传入的GetTeamFixtures来自用户输入,你应该准备好你的语句,以防止SQL注入。

于 2013-04-12T03:05:29.810 回答
0

$con在函数中不可见。如果你想让一个全局变量在一个函数的范围内,你必须声明它global

function GetTeamFixtures($team) {
  global $con;
  # ...
}
于 2013-04-12T03:05:59.137 回答