我们有一个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()。有太多记录可以带回来。似乎效率低下。)
答案 0 :(得分:0)
找到它。由于$ pdo不知道要查询CloudSQL实例中的哪个数据库,查询($ sql)部分失败了。 CloudSQL仪表板有一个链接"如何连接到您的CloudSQL实例"。由于我复制并粘贴了这个连接代码,我错过了它缺少dbname组件。
Google在mysqli部分中包含了dbname部分,但未包含"如何连接到CloudSQL实例的pdo部分"。