Php sql查询有时返回null

Php sql查询有时返回null,php,mysql,Php,Mysql,在我的PHP中,我对数据库(团队列表)进行sql查询。在某些团队中,查询返回null。如果我在phpmyadmin中进行相同的查询,它将返回我要查找的值 我的查询代码: $sql = $mysqli->query(" SELECT `team` FROM `dota teams` WHERE `team` LIKE '%$team%' OR `teamalt` LIKE '%$team%' ") or die($mysqli->error); 例如

在我的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电子竞技。使用Virtus Pro,如果我使用vp或Virtus,它会返回我想要的值。使用NAVI时,我返回null或what。如果我写EG或邪恶,邪恶的天才也会返回值

为什么我可以用某个名称得到一个返回值,而用另一个名称却得不到

完整的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
    }
}
$date=$mysqli->real_escape_字符串(日期(“d \-m \-Y”);
$team=集合空间($team)//在团队中设置空格,以便我们可以使用它进行搜索
//获取团队名称
$sql=$mysqli->query(“
选择“团队”`
来自dota团队`
其中“team”类似“%$team%”
或者像“%$team%”这样的“teamalt”
)或死亡($mysqli->error);
如果($sql->num\u rows>0){
$team=$sql->fetch_array();
$team=$team['team'];
//拿到所有的火柴
$sql=$mysqli->query(“
从“dota计划”中选择*`
其中`date`>='$date'和`teams`
例如“%$team%”按“日期”和“时间”ASC排序
)或死亡($mysqli->error);
//循环浏览所有结果
而($data=$sql->fetch_array()){
//根据时区更改时间
$time\u arr=str\u split($data['time'],3);
$hour=$time\u arr[0]+$time\u add;
$min=str_replace(“:”,“,$time_arr[1]);
$time=“$hour:$min”;
//组队
$teams=get_teams($data['teams']);
//找脚轮
$caster=explode(''u'',$data['caster']);
foreach($caster as和$c){
$c=获取($c,“[”,“]”)之间的字符串;
}
//循环查看施法者使用的语言。
foreach($caster as和$c){
$sqls=$mysqli->query(“从`dota casters`中选择`language`、`stream`,其中`name`='$c'))或die($mysqli->error);
$da=$sqls->fetch_array();
如果($da[“语言”]=“英语”){
$stream=$da['stream'];
$c=“”;
}
否则如果($da[“语言”]=“俄罗斯”){
$stream=$da['stream'];
$c=“”;
}
}
?>
//写出表格。
VS
对于“为什么使用某个名称可以得到返回值,而使用某个名称不能得到返回值?”的问题,这是因为您的查询只选择了一个字段team,但您的where子句查看的是两个字段,带有or逻辑

因此,如果您有一条记录,其中团队字段为null,而团队alt字段的值为“te”,则使用“te”作为搜索参数的查询将返回一行null值


如何处理取决于您的需求。如何处理取决于您的数据库引擎,而该引擎似乎未指定。

可能您的问题在

$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);.

您可以发布更多的PHP代码吗?整个代码现在位于底部。因为您的查询在PHPMyAdmin中运行,并且与您的PHP代码不匹配,所以问题一定是您执行的方式。您确定第一个查询是错误的吗?我不认为
teamalt
不在
选择中可能是原因。您可以从t中选择id,其中name=“blabla”
(示例)没有问题。我使用phpMyAdmin 3.5.7 atm。如果我理解您的回答正确,查询将返回2行?一行为null,一行为我想要的返回?如果是这样,我只需检查第一行是否为null,如果是这样,我将检查第二行。补充第一条注释:原因是
WHERE
子句比子句先求值e> 选择
子句().Sry关于我必须包括我从何处获得团队。我从get方法获得它,如果团队名称有任何空格,如4个friends+chrille。要将名称放入get中,我只需执行4个friends+chrille,然后我创建了一个方法来获取空格。@o如果您的查询为null?或者您的
$team
为null?如果您使用
>若要提交名称,您实际上不需要加下划线。查询返回了零行。Team有一个值,我甚至用脚本对其进行了测试。您必须检查
$Team
的值是否与您在其上加的值相同。这是现在唯一可能出现的问题。您测试了我的查询吗?是的,我已经测试了您的查询你和我在代码中直接测试了$sql=$mysqli->query(“选择
team
FROM
dota teams
WHERE
team
LIKE'te'或
teamalt
LIKE'myste'”)或死亡($qli->error);。