Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
[MySQL][PHP]与子查询的结果不同:PHP调用VS phpMyAdmin_Php_Mysql_Phpmyadmin - Fatal编程技术网

[MySQL][PHP]与子查询的结果不同:PHP调用VS phpMyAdmin

[MySQL][PHP]与子查询的结果不同:PHP调用VS phpMyAdmin,php,mysql,phpmyadmin,Php,Mysql,Phpmyadmin,我试图找出问题出在哪里,但我转过身,却找不到有同样问题的人 所以我有一个要求: select killer as idPlayer FROM (SELECT v.idPlayer as victim, v.name as vicName,k.idPlayer as killer, k.name as kilName, count(*) as number FROM stats_players v LEFT OUTER JOIN stats_events e ON v.idPlayer = e.i

我试图找出问题出在哪里,但我转过身,却找不到有同样问题的人

所以我有一个要求:

select killer as idPlayer FROM
(SELECT v.idPlayer as victim, v.name as vicName,k.idPlayer as killer, k.name as kilName, count(*) as number
FROM stats_players v
LEFT OUTER JOIN stats_events e ON v.idPlayer = e.idPlayerVictim
LEFT OUTER JOIN stats_players k ON e.idPlayer = k.idPlayer
WHERE e.type="PVP"  
GROUP BY v.idPlayer,k.idPlayer
HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC) AS T
group by killer
order by count(*) DESC, sum(number) DESC
LIMIT 1
在PhPMyAdmin中运行良好,它返回我1条记录,这正是我想要的

当我使用与PDO完全相同的请求的Php调用时,如下所示:

try {
    $bdd = new PDO('mysql:host=' . SQL_HOST . ';dbname=' . SQL_DBASE, SQL_USER, SQL_PASS);
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $bdd->query('SET session wait_timeout=120');
    $bdd->query('SET session interactive_timeout=120');

} catch (PDOException $e) {
    die('Error during the connection to the  MYSQL database : ' . $e->getMessage());
}

$title['request'] = 'select killer as idPlayer FROM
    (SELECT v.idPlayer as victim, v.name as vicName,k.idPlayer as killer, k.name as kilName, count(*) as number
    FROM stats_players v
    LEFT OUTER JOIN stats_events e ON v.idPlayer = e.idPlayerVictim
    LEFT OUTER JOIN stats_players k ON e.idPlayer = k.idPlayer
    WHERE e.type="PVP"  
    GROUP BY v.idPlayer,k.idPlayer
    HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC) AS T
    group by killer
    order by count(*) DESC, sum(number) DESC
    LIMIT 1';

$playerList = request_db($bdd,$title['request']);

function request_db($bdd, $request, $txt = '') {
    try {
        if (isset($_GET['debug']) && $_GET['debug'] == 'request') {
            echo $request . '<br>';
            // logfile('requete : ' . $request);
        }

        $timeReqStart = microtime(true);
        $result = $bdd->query($request);
        $timeReqEnd = microtime(true);
        $timeReq = $timeReqEnd - $timeReqStart;
        if ($txt != '') {
            echo $txt . '<br>';
        }
        if (preg_match("/^SELECT/", $request)) { /* Return the ID of the last request (INSERT ONLY) */
            $res_tab = $result->fetchAll();
            $result->closeCursor();
            return $res_tab;
        } else if (preg_match("/^INSERT/", $request) || preg_match("/^UPDATE/", $request)) { /* All that not insert return table */
            echo 'Time Process request : ' . number_format($timeReq, 3) . ' sec <br>';
            return $bdd->lastInsertId();
        }
    } catch (Exception $e) {
        echo 'Error while contacting the database. Please contact the administrator. <br>';
        logfile($request);
        logfile('request error :' . $e->getMessage());
        if (isset($_GET['debug'])) {
            echo 'request : ' . $request . '<br>';
            die('Error during the request to the MYSQL database : <br>' . $e->getMessage());
        }
    }
}
两个动作phpMyAdmin或通过PhpCAll都很好,我在这两种情况下都有很好的效果

为什么php调用不需要子查询,而它可以在phpmyadmin上正常工作 我正在使用WAMP服务器


谢谢,

好的,问题来自我请求开始时的“选择”,在我的函数请求数据库中,我的条件等待“/^select/”,我向它发送一个“选择”。它区分大小写,因此在负号中不起作用:


我将我的请求从“选择”更改为“选择”,现在它就像一个符咒一样工作。

你也可以发布你的php代码吗?只是在我的pdo调用之后添加了下一行代码!我们不知道$request是什么样子的。好吧,我现在已经把我所有的代码都放在这里了:应该更好。下一个问题是什么是$bdd,它是在哪里定义的,。。。
SELECT v.idPlayer as victim, v.name as vicName,k.idPlayer as killer, k.name as kilName, count(*) as number
    FROM stats_players v
    LEFT OUTER JOIN stats_events e ON v.idPlayer = e.idPlayerVictim
    LEFT OUTER JOIN stats_players k ON e.idPlayer = k.idPlayer
    WHERE e.type="PVP"  
    GROUP BY v.idPlayer,k.idPlayer
    HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC