PHP pdo fetchColumn()在Google App Engine

时间:2016-03-10 19:55:42

标签: php google-app-engine pdo google-cloud-sql

我们有一个PHP脚本使用pdo代码和mySQL数据库全部托管在我们的ISP标准LAMP堆栈上,运行数周后没有任何问题。 Boss希望部署到Google App Engine和CloudSQL。 CloudSQL填充了相同的数据。从指向mySQL和CloudSQL的本地机器上的GAE dev实现中获取它,并且在两种情况下都可以正常工作。

在云中将GA代码部署到GAE并更改pdo连接字符串以适应GAE到CloudSQL连接时,我们收到以下错误:

  

致命错误:在a上调用成员函数fetchColumn()   非对象...

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的处理方式不同?

任何解决方案? (我更倾向于不对“从目录中选择CatalogID;”调用rowCount()。有太多记录可以带回来。似乎效率低下。)

1 个答案:

答案 0 :(得分:0)

找到它。由于$ pdo不知道要查询CloudSQL实例中的哪个数据库,查询($ sql)部分失败了。 CloudSQL仪表板有一个链接"如何连接到您的CloudSQL实例"。由于我复制并粘贴了这个连接代码,我错过了它缺少dbname组件。

Google在mysqli部分中包含了dbname部分,但未包含"如何连接到CloudSQL实例的pdo部分"。