0

私の PHP では、チームのリストであるデータベースに SQL クエリを作成します。一部のチームでは、クエリは null を返します。phpmyadmin で同じクエリを作成すると、探している値が返されます。

私のクエリコード:

$sql = $mysqli->query("
    SELECT `team`
    FROM `dota teams`
    WHERE `team` LIKE '%$team%'
    OR `teamalt` LIKE '%$team%'
")  or die($mysqli->error);

たとえば、私のウェブサイトからのクエリが te の場合は null を返しますが、クエリが titan の場合は Titan Esports を返します。また、Virtus Pro では、vp または virtus を使用すると、必要な値が返されます。NAVI では null を返します。Evil Geniuses は、EG または Evil と記述した場合にも値を返します。

ある名前では戻り値を取得し、一部の名前では返さないのはなぜですか?

ここに画像の説明を入力

完全な PHP コード:

$date = $mysqli->real_escape_string(date("d\-m\-Y"));

$team = set_space($team); //Set spaces in teams so we can ute it for search

// Get team name
$sql = $mysqli->query("
    SELECT `team`
    FROM `dota teams`
    WHERE `team` LIKE '%$team%'
    OR `teamalt` LIKE '%$team%'
")  or die($mysqli->error);

if($sql->num_rows>0){
    $team = $sql->fetch_array();
    $team = $team['team'];

// Get all the matches
    $sql = $mysqli->query("
        SELECT * FROM `dota schedule`
        WHERE `date` >= '$date' AND `teams`
        LIKE '%$team%' ORDER BY `date`,`time` ASC
    ")  or die($mysqli->error);

    // Loop through all the results
    while ($data = $sql->fetch_array()){
        // Change the time based on timezone
        $time_arr = str_split($data['time'],3);
        $hour = $time_arr[0] + $time_add;
        $min = str_replace(":","",$time_arr[1]);
        $time = "$hour : $min";

        // Get teams
        $teams = get_teams($data['teams']);

        // Get casters
        $caster = explode('_', $data['caster']);
        foreach($caster as &$c){
            $c = get_string_between($c,'[',']');
        }
        // Loop through to see which language the casters has.
        foreach($caster as &$c){
            $sqls = $mysqli->query("SELECT `language` , `stream` FROM `dota casters` WHERE `name` = '$c'") or die($mysqli->error);
            $da = $sqls->fetch_array();
            if($da['language'] == "English"){
                $stream = $da['stream'];
                $c = "<a href='$stream'><img src='http://joffe.kottnet.eu/flags/uk.png' alt='English'>$c</a>";
            }
            else if($da['language'] == "Russia"){
                $stream = $da['stream'];
                $c = "<a href='$stream'><img src='http://joffe.kottnet.eu/flags/russia.png' alt='English'>$c</a>";
            }
        }
    ?>
        // Write out table.
        <tr>
            <td><?= "Date:" . $data['date'] . " Time: " .$time?></td>
            <td><?= $data['cup'] ?></td>
            <!-- 3 TD for teams -->
            <td class="team1"><?= $teams[0] ?></td>
            <td class="vs">VS</td>
            <td><?= $teams[1] ?></td>
            <td><?= print_out_array($caster); ?></td>
        </tr>
    <?php
    }
}
4

2 に答える 2

0

多分あなたの問題は

$team = set_space($team);

どこから来たのか投稿していないので、よくわかりません$team。クエリに対する PHP コードを作成することで、クエリが適切に作成されているかどうかを確認できechoます。エラーが発生しないように、エコーの後にすべてコメントします。

クエリが間違っている場合は、次のように変更してみてください。

$sql = $mysqli->query("
    SELECT `team` 
    FROM `dota teams` 
    WHERE `team` LIKE '%" . $team . "%' 
    OR `teamalt` LIKE '%" . $team . "%'
")  or die($mysqli->error);.
于 2013-10-21T12:46:51.460 に答える
0

「ある名前で返される値を取得し、返されない値を取得するのはなぜですか?」という質問については、クエリが team という 1 つのフィールドのみを選択しているのに、where 句が or ロジックを使用して 2 つのフィールドを参照しているためです。 .

したがって、team フィールドが null で、teamalt フィールドの値が「te」であるレコードがある場合、検索パラメーターとして「te」を使用したクエリは、null 値を持つ 1 つの行を返します。

それについて何をすべきかは、要件によって異なります。どのように行うかは、指定されていないように見えるデータベース エンジンによって異なります。

于 2013-10-21T12:24:10.963 に答える