我正在尝试从数据库中获取简单信息并将其回显到屏幕,但它对我不起作用。
$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个不同的团队。
答案 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,则无法从函数中访问全局变量$con
。 global
语句可用于在您的函数中创建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;
# ...
}