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

接続について説明した 2 人のユーザーを除いて、私が見つけたエラーの 1 つは、一重引用符の無効な使用です。

テーブル名は識別子であり、文字列リテラルではないため、単一引用符で囲むことはできません。一重引用符を削除すると、機能するはずです。

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

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-04-12T03:05:25.837 に答える
1

(これは、他のすべての回答を簡潔に組み合わせようとする私の試みです。)

2 つの問題があります。

まず、ステートメント$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 に答える
1

使用する代わりに関数外の変数にアクセスする別の方法global variablesは、パラメーターに追加することです

例えば

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

またJ W、クエリで言うように、「」を削除するか、「バックティック」に置き換えてください。

于 2013-04-12T03:10:28.597 に答える
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 に答える