非常奇怪的SQL错误,其中没有正确地提取数据

时间:2014-12-17 14:02:04

标签: php sql

我有两个页面非常相似,但做的事情略有不同。但是,两者都将数据放入名为playerRegSeason的表中。

这是我在一个页面上使用的SQL代码:

$sql2="INSERT INTO playerRegSeason 
       (playerID, year, teamID, gp, minutes, pts, oreb, dreb, reb, 
        asts, stl, blk, turnover, pf, fga, fgm, fta, ftm, tpa, tpm)

   SELECT playerID, $year, '$teamID', $gp, $minutes, $pts, $oreb, 
     $dreb, $reb, $asts, $stl, $blk, $turnover, $pf, $fga, $fgm, 
     $fta, $ftm, $tpa, $tpm FROM players WHERE firstname='".$firstname."' 
   AND lastname='".$lastname."' AND firstseason='".$firstseason."'";

这是另一页的代码:

$sql2="INSERT INTO playerRegSeason 
       (playerID, year, teamID, gp, minutes, pts, oreb, dreb, reb, 
        asts, stl, blk, turnover, pf, fga, fgm, fta, ftm, tpa, tpm)

   VALUES ($playerID, $year, '$teamID', $gp, $minutes, $pts, $oreb, 
     $dreb, $reb, $asts, $stl, $blk, $turnover, $pf, $fga, $fgm, 
     $fta, $ftm, $tpa, $tpm)";

在这两个页面上,当我查看数据库时,数据已添加并且格式正确。

现在,是我的问题。我有另一个页面显示表的内容。以下是无效的代码:

$quer1 = "SELECT * FROM players p
        INNER JOIN playerRegSeason pr ON p.playerID = pr.playerID
        INNER JOIN teams t ON pr.teamID = t.teamID 
        WHERE p.firstname='$firstname' AND p.lastname='$lastname'";

        $result1 = mysqli_query($con, $quer1);
while($row = mysqli_fetch_array($result1)) {
            echo "<tr>";
            echo "<td>" . $row['year'] . "</td>";
            echo "<td>" . $row['location']." ". $row['name'] . "</td>";
            echo "<td>" . $row['leag'] . "</td>";
            echo "<td>" . $row['gp'] . "</td>";
            echo "<td>" . $row['minutes'] . "</td>";
            echo "<td>" . $row['pts'] . "</td>";
            echo "<td>" . $row['oreb'] . "</td>";
            echo "<td>" . $row['dreb'] . "</td>";
            echo "<td>" . $row['reb'] . "</td>";
            echo "<td>" . $row['asts'] . "</td>";
            echo "<td>" . $row['stl'] . "</td>";
            echo "<td>" . $row['blk'] . "</td>";
            echo "<td>" . $row['turnover'] . "</td>";
            echo "<td>" . $row['pf'] . "</td>";
            echo "<td>" . $row['fga'] . "</td>";
            echo "<td>" . $row['fgm'] . "</td>";
            echo "<td>" . $row['fta'] . "</td>";
            echo "<td>" . $row['ftm'] . "</td>";
            echo "</tr>";
            echo "</table>";
            }

奇怪的是,从第一个sql输入的任何数据都不会显示,但是通过第二个sql语句输入的任何数据都将显示。即使两个条目在数据库中彼此紧挨着列出,但具有相同的playerID主键。

2 个答案:

答案 0 :(得分:1)

在第二组sql插入中,你总是要进行插入(假设没有变量错误等)。

在第一组sql中,您正在执行select语句来执行插入,特别是查看where子句 - 如果该子句消除了所有返回的结果,则不会插入任何记录。如果您运行语句:

SELECT *
-- input your expected values in place of the variables
FROM players WHERE firstname= ''
   AND lastname='' AND firstseason='';

您可能会看到此查询没有返回任何内容,因此第一个查询中不会插入任何内容。

基于你的评论听起来像问题(因为它不是由于第一个sql语句)可能是由于内连接:

尝试你的查询:

SELECT * FROM players p
--INNER JOIN playerRegSeason pr ON p.playerID = pr.playerID
--INNER JOIN teams t ON pr.teamID = t.teamID 
WHERE p.firstname='$firstname' AND p.lastname='$lastname

查看您是否获得了预期的价值。如果是,请取消注释playerRegSeason上的内部联接,如果仍然获得预期的行,则取消注释团队中的联接。可能的原因是您加入的表中至少有一个不包含您期望的记录,因此查询不会返回。 (或者正如David建议的那样,为了测试目的,将你的内连接更改为左连接)

答案 1 :(得分:1)

你正在做两个内连接,当你说两个条目都有相同的玩家ID时,你已经确认了其中一个,但它们是否也有相同的teamID?

如果第一个条目没有团队表中存在的teamID,则无法通过您的查询进入。

检查此问题的一种快捷方法是更改​​“内部联接”。在带有LEFT JOIN的团队表上,如果这样可以获得更多记录,那么您的数据会有一些不存在于团队表中的teamID值。