2016-03-10 1 views
0

У нас был PHP-скрипт с использованием кода pdo с базой mySQL, размещенной в нашем стандартном стеке LAMP, без каких-либо проблем после запуска в течение нескольких недель. Босс хочет разворачиваться в Google App Engine и CloudSQL. CloudSQL заполняется теми же данными. Исправлено из реализации GAE dev на локальной машине, указывающей на mySQL и CloudSQL, и отлично работает в обоих случаях.PHP pdo fetchColumn() не работает специально для Google App Engine

После развертывания PHP код GAE в облаке и изменение строки соединения PDO, чтобы обеспечить возможность подключения GAE-к-CloudSQL мы получаем следующее сообщение об ошибке:

Fatal error: Call to a member function fetchColumn() on a non-object...

include 'database.php';  //pdo connection with try|catch confirming connection. 
$pdo = Database::connect(); //No problems here. We have connection object. 
$sql = "SELECT Count(CatalogID) FROM Catalog"; 
$rows = $pdo->query($sql)->fetchColumn(); //This is the line that throws the error. 

Почему обрабатывать GAE по-разному?

Любые решения? (Я бы предпочел не вызывать rowCount() в отношении «Select CatalogID from Catalog». Слишком много записей для возврата. Кажется неэффективным.)

ответ

0

Найденный. Не удалось выполнить запрос ($ sql) из-за $ pdo, не зная, какая база данных в экземпляре CloudSQL должна быть запрошена. На панели мониторинга CloudSQL есть ссылка «Как подключиться к вашему экземпляру CloudSQL». Поскольку я копировал и вставлял этот код подключения, я пропустил, что ему не хватает компонента dbname.

Google включил часть dbname в раздел mysqli, но не раздел pdo в разделе «Как подключиться к вашему экземпляру CloudSQL».