Php 使用die()时SQL语句中的结果数不同

Php 使用die()时SQL语句中的结果数不同,php,mysql,Php,Mysql,在PHP脚本中,我执行一个MySQL请求,其中$SQL是一个硬编码的SQL-SELECT语句: $Result = mysqli_query($server,$SQL); echo '<br>'.$SQL.'*'.mysqli_num_rows($Result); #die('test'); 整个脚本相当复杂,但运行上面的代码会打印SQL语句并交付14个结果行。 由于我想在此时直接检查数据库,所以在请求之后添加了上面的die。但是,SQL语句现在只提供13个结果行 我知道在执行之后

在PHP脚本中,我执行一个MySQL请求,其中$SQL是一个硬编码的SQL-SELECT语句:

$Result = mysqli_query($server,$SQL);
echo '<br>'.$SQL.'*'.mysqli_num_rows($Result);
#die('test');
整个脚本相当复杂,但运行上面的代码会打印SQL语句并交付14个结果行。 由于我想在此时直接检查数据库,所以在请求之后添加了上面的die。但是,SQL语句现在只提供13个结果行

我知道在执行之后剪切代码可能会改变系统的状态,因为在剪切代码中可能的数据库操作将不再生效。但无论在运行之前,模具是否处于活动状态,我总是在没有模具的情况下得到14个结果,在有模具的情况下总是得到13个结果

所以我的问题是:每次我在没有骰子的情况下运行代码,然后直接在激活骰子的情况下再次运行代码,直到骰子语句出现为止,代码或数据库状态没有明显差异,所以SELECT语句应该始终提供相同数量的行。。。但事实并非如此

有人能想出一个让这种行为可以理解的环境吗?我希望我的解释不是为了威德,否则我很乐意回答任何问题。很明显,有一个简单的解释,只有我似乎错过了

编辑:

我的问题可能是我在一大块代码中隐藏了一个bug。这当然很难回答,尤其是如果您没有完整的代码。但如果我将问题重新表述为以下任务,可能会有所帮助:

您是否可以编写一个包含上述代码段的PHP代码,该代码段显示了相同的行为?因此,无论是否激活每次运行,它都会在禁用模具的情况下提供14个结果,在激活模具的情况下提供13个运行结果当然,允许源代码自行分析将是一种欺骗

编辑2:


我找到了错误的原因。这是因为PHP通知和警告在代码中的打印在开发过程中积累,而在Firefox中,如果它们在节之前达到一定的大小,则似乎会导致问题。模具外壳导致的这些问题较少,因为它破裂较早,事实上甚至没有达到预期的效果。如果我注意到两个示例的行为相同。到底是什么导致了这个错误,我还没有检查。。。很抱歉,我在描述我的问题时没有暗示错误报告,但我不知道这可能是原因——特别是在这两种情况下,它都是活动的……

不是答案,只是我所指的示例

您只需复制并粘贴它,调整MySQL连接数据凭据、主机、数据库,然后运行它

在我的例子中,它按预期从soFoo*14打印SELECT id、x、y、z,因为设置函数向临时表添加了14条记录,而不管模具是否在临时表中。因此,这个示例的行为与您的描述不同,但它包含您提供的信息和代码段。你这方面肯定有些不同。
我已经用php5.6.10 win32和MySQL 5.6.22-log win32测试了该脚本。

第14个结果是从骰子后的一行输出?在运行查询后,php中骰子的存在/不存在不会影响数据库中的行数。@Blaatpraat但他使用mysqli_num_rows来计算行数,所以不管死后是否有内容。。。不需要的输出将出现在$Result…:S@Blaatpraat:它来自同一回显的mysqli_num_rows$结果-line@Marc由于某些操作被切断,模具更改了数据库。但当我在没有模具的情况下跑步时,下一次跑步的开始情况又是一样的。但在下一次运行中,结果的数量似乎取决于模具是否设置在那里……是的,我尝试过,这里也是一样。我已经用我的表创建了这样一个最小化的示例,这也很有效。我可能在我的其他代码中有一个bug,但是如果我想创建的话,我甚至无法创建一个行为。所以我希望可能还有其他原因,例如,当你写缓冲或非缓冲查询时,我得到了一丝希望。。。就像PHP脚本被强制终止时的某种缓冲或任何其他wierd解释一样,我想不起来这就是为什么我在这里问。VolkerK,我不知道你是否仍然感兴趣,或者是否会自动通知你,但我编辑了我的原始帖子……对不起,我不知道在哪里可以找到错误。但是,如果您还没有尝试过调试器可以帮助您定位错误,请参阅,例如,对于我来说,在没有工作调试器的情况下开发是可能的,但徒劳-没有调试器是在训练我少犯错误——至少我喜欢我相信这一点的想法——但幸运的是,我现在发现了错误,或者至少找到了触发它的原因:-哇,我很好奇是什么触发了它-哦,使用像netbeans这样的IDE真的是个好主意,不要让你的生活变得比需要的更艰难
<?php
$server = setup();
$SQL = 'SELECT id,x,y,z FROM soFoo';
$Result = mysqli_query($server,$SQL);
echo '<br>'.$SQL.'*'.mysqli_num_rows($Result);
#die('test');

function setup() {
    $server = new mysqli('localhost', 'localonly', 'localonly', 'test');
    if ( $server->connect_errno ) {
        die('!'.$server->connect_error);
    }

    $server->query('CREATE TEMPORARY TABLE soFoo (
            id int auto_increment,
            x char(255),
            y char(255),
            z char(255),
            primary key(id) 
        )
    ') or die('!'.$server->error);

    $stmt=$server->prepare('INSERT INTO soFoo (x,y,z) VALUES (?,?,?)')
        or die('!'.$server->error);

    $stmt->bind_param('sss', $x, $y, $z) or die('!'.$stmt->error);
    foreach( range('a','n') as $x) { // fill in 14 records
        $z = $y = $x;
        $stmt->execute() or die('!'.$stmt->error);
    }
    return $server;
}