Один заполненный оператор заполнитель не работает - PullRequest
0 голосов
/ 12 мая 2018

У меня есть следующий код на одном сервере. Работает нормально.

$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 не имеют проблем с принятием строкового значения

Вот мои вопросы:

  1. Почему он отлично работает на сервере под управлением PHP 5.6, но не на моем новом сервере под управлением PHP 7.0
  2. Почему это только последнее: DEVELOPER_ID - это проблема, а не первые три?

1 Ответ

0 голосов
/ 12 мая 2018

Приведение типов более важно в PHP7.

В PHP5 вы можете сделать:

$ a = "9"; печать (9 * $ a);

В PHP7:

$ a = "9"; print (9 * (int) $ a);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...