我们有一个PHP脚本使用pdo代码和mySQL数据库,所有这些都托管在我们的ISP标准LAMP堆栈上,运行数周后没有任何问题 . Boss希望部署到Google App Engine和CloudSQL . CloudSQL填充了相同的数据 . 从指向mySQL和CloudSQL的本地机器上的GAE dev实现中获取它,它在两种情况下都能正常工作 .
在将PHP代码部署到 Cloud 中的GAE并更改pdo连接字符串以适应GAE到CloudSQL连接时,我们会收到以下错误:
致命错误:在非对象上调用成员函数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 回答
找到了 . 由于$ pdo不知道要查询CloudSQL实例中的哪个数据库,查询($ sql)部分失败了 . CloudSQL仪表板有一个链接“如何连接到您的CloudSQL实例” . 由于我复制并粘贴了这个连接代码,我错过了它缺少dbname组件 .
谷歌包括mysqli部分中的dbname部分,但不包括“如何连接到您的CloudSQL实例”的pdo部分 .