简单的mysqli查询无法正常工作

时间:2013-04-12 03:03:46

标签: php mysql mysqli

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

$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 = 1,第49行是$ row = 1)。

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个不同的团队。

5 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

E.g

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

同样正如J W在你的查询中所说的那样删除''或用``反引号替换它..

答案 2 :(得分:1)

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

有两个问题。

首先,如果没有global statement,则无法从函数中访问全局变量$conglobal语句可用于在您的函数中创建reference$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");

答案 3 :(得分: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的{​​{1}}来自用户输入,则应prepare your statement,以防止SQL注入。

答案 4 :(得分:0)

$con在函数中不可见。如果要将全局变量放在函数的作用域中,则必须将其声明为global

function GetTeamFixtures($team) {
  global $con;
  # ...
}