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。如果我使用 vp 或 virtus,它会返回我想要的值。使用 NAVI,我返回 null 或者什么。如果我写 EG 或 Evil,Evil Geniuses 也会返回值。

为什么有一些名字我得到一个返回值而有一些没有?

在此处输入图像描述

完整的 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。在 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

对于这个问题,“为什么用某个名称我会得到一个返回值而有些却没有?”,这是因为您的查询只选择一个字段,团队,但您的 where 子句正在查看两个字段,使用 or 逻辑.

因此,如果您有一条记录,其中 team 字段为空,并且 teamalt 字段的值为“te”,则以“te”作为搜索参数的查询将返回一个具有空值的行。

如何处理它取决于您的要求。如何做到这一点取决于您似乎未指定的数据库引擎。

于 2013-10-21T12:24:10.963 回答