Php sql查询有时返回null

标签 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);

例如,如果我的网站的查询是 te,则返回 null,但如果查询是 titan,则返回 Titan Esports。对于 Virtus Pro,如果我使用 vp 或 virtus,它会返回我想要的值。使用 NAVI 我返回 null 或者什么。如果我写 EG 或 Evil,邪恶天才也会返回值。

为什么有些名称我能得到返回值,而有些却不能?

enter image description here

完整的 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
    }
}

最佳答案

对于“为什么某些名称我能得到返回值而某些却不能?”这个问题,这是因为您的查询仅选择一个字段,团队,但您的 where 子句正在查看两个字段,与 或 逻辑。

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

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

关于Php sql查询有时返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19493948/

相关文章:

PHP 数组值到唯一键

mysql - SQL : how to make multiple COUNT/MAX

php - Laravel - 没有模型的查询结果

mysql - 有索引的查询比没有索引慢

PHPCS 嗅探名称似乎与 PHPCBF 修复不匹配

php - 无法将记录从一个表更新到另一个表

MySQL 命名约定

java - 'INTEGER'和 'CHAR (UCS_BASIC)' java数据库比较

php - 通过 discord webhook 发送附件/文件

php - 我如何使用 PHP 从 mysql 数据库中检索和显示时间戳?