У меня есть следующий код на одном сервере. Работает нормально.
$developer_id = $_SESSION['auth']['id'];
$sql = "select sum(file_size) as total_storage_size, (select count(*) from language_set where developer_id = :DEVELOPER_ID) as total_projects, (select count(*) from testing_group where developer_id = :DEVELOPER_ID) as total_test_apps, (select count(*) from published_group where developer_id = :DEVELOPER_ID) as total_published_apps, account_type from resource JOIN language_set on resource.set_id = language_set.id JOIN developer on developer_id = developer.id where developer_id = :DEVELOPER_ID";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(":DEVELOPER_ID", $developer_id, PDO::PARAM_INT);
$stmt->execute();
$account_info = $stmt->fetch(PDO::FETCH_ASSOC);
Однако, когда я перемещаю его на другой сервер, он дает неверные результаты. Например, он задает account_type как «NULL» вместо «standard».
Я отследил проблему до следующих проблем:
- $ developer_id при извлечении из базы данных становится строкой. Если я приведу его к int, он будет работать нормально
- Это только последнее: DEVELOPER_ID в операторе sql создает проблему, другое: DEVELOPER_IDs не имеют проблем с принятием строкового значения
Вот мои вопросы:
- Почему он отлично работает на сервере под управлением PHP 5.6, но не на моем новом сервере под управлением PHP 7.0
- Почему это только последнее: DEVELOPER_ID - это проблема, а не первые три?