У вас проблема в том, что ваш запрос недействителен. Вы пропустили важную часть, которая объединяет строку, содержащую условную агрегацию, которую вы создали в своих столбцах (которую вы создаете с помощью первого SELECT с GROUP_CONCAT), со строкой, содержащей фактический SELECT из вашей таблицы.
Вместо этого вы написали
SELECT @sql;
который возвращает строку клиенту.
Но сразу же после этого
prepare stmt FROM @sql;
не удается по указанной выше причине.
Теперь к your previous question у вас есть ответ с чем-то похожим на правильный код. Для упрощения вызова этого кода из PHP я настоятельно рекомендую, чтобы обернуть его в хранимую процедуру
DELIMITER $$
CREATE PROCEDURE sp_pivotscores()
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'sum(case when gameid = ''',
gameid,
''' then score else 0 end) AS ''',
gameid, ''''
)
) INTO @sql
FROM scores;
SET @sql = CONCAT('SELECT coalesce(playerid, ''Column Total'') as playerid, ', @sql, ', sum(score) as row_total
FROM scores
GROUP BY playerid WITH ROLLUP');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
Затем PHP код может выглядеть
try {
$db = new PDO('mysql:host=localhost;dbname=your_db_name;charset=UTF8', 'user', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$query = $db->prepare("CALL sp_pivotscores()");
$query->execute();
$result = $query->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
echo "Exeption: " .$e->getMessage(); //TODO better error handling
$result = false;
}
$query = null;
$db = null;
var_dump($result);
ли $ установка дб как объект п.д.о.? –
Я предполагаю, что ваш вызов '$ db-> query ($ query);' не работает, заставляя '$ queryku' присваивать значение' null'. Появляются ли какие-либо ошибки? –
Вам нужно проверить, работают ли ваши вызовы в базе данных. Я подозреваю, что вызов 'query()' возвращает false, но если вы проверите ошибки из базы данных, вы увидите, почему – andrewsi