如何使用 CodeIgniter 连接到 Google Cloud SQL 数据库?

2023-12-11

我在 Google App Engine 上的 CodeIgniter 应用无法连接到我在 Google Cloud SQL 上的数据库。我尝试了很多事情。

  1. 当我将数据库用户名、密码和数据库名称留空时,我的网站会加载,但是具有数据库调用的页面会显示错误。它说没有选择数据库。
  2. 我注意到我的数据库没有创建,并创建了一个新数据库和一个具有所有权限的用户。我在我的应用程序中输入了这些详细信息,现在它甚至没有连接到数据库服务器。没有页面服务。
  3. 当我仅删除 database.php 中的用户名和密码字段时,它会连接到数据库服务器,但不会连接到数据库。

我检查了 mysql 数据库中的用户,我的用户拥有所有权限。我检查了所有拼写,都是正确的。该应用程序正在本地运行。我该如何解决这个问题?我就是无法连接。


开箱即用的 CodeIgniter 不会连接到 Google Cloud SQL 实例,需要修改 CI 数据库驱动程序文件,这是因为 CI 期望它的选择是连接到本地主机或远程 tcpip 主机,这是开发人员从未预料到的任何人都想直接连接到套接字。

出于性能原因,我选择使用 Mysqli 驱动程序而不是 Mysql,以下是我的做法:

步骤1)编辑codeigniter/system/database/drivers/mysqli/mysqli_driver.php文件并将db_connect函数替换为以下代码:

function db_connect()
{
    if(isset($this->socket)){
        return mysqli_connect(null, $this->username, null, $this->database, null, $this->socket);
    }
    elseif ($this->port != ”)
    {
        return mysqli_connect($this->hostname, $this->username, $this->password, $this->database, $this->port);
    }
    else
    {
        return mysqli_connect($this->hostname, $this->username, $this->password, $this->database);
    }
}

步骤 2) 更改应用程序的 config/database.php(或任何您想要声明数据库设置的位置) - 根据您的应用程序,您可以选择将“数据库”添加到 yourapp/config/autoload.php 中的自动加载数组中,或者您可以选择手动调用load->database()函数。这假设您的应用程序名称是“myappname”。适当地替换 APPENGINE-ID 和 DATABASE-INSTANCE-ID 以及 YOUR_DATABASE_NAME。

$db[‘myappname’][‘hostname’] = ‘localhost’;
$db[‘myappname’][‘username’] = ‘root’;
$db[‘myappname’][‘password’] = null;
$db[‘myappname’][‘database’] = ‘YOUR_DATABASE_NAME’;
$db[‘myappname’][‘dbdriver’] = ‘mysqli’;
$db[‘myappname’][‘pconnect’] = FALSE;
$db[‘myappname’][‘dbprefix’] = ‘’;
$db[‘myappname’][‘swap_pre’] = ‘’;
$db[‘myappname’][‘db_debug’] = FALSE;
$db[‘myappname’][‘cache_on’] = FALSE;
$db[‘myappname’][‘autoinit’] = FALSE;
$db[‘myappname’][‘char_set’] = ‘utf8’;
$db[‘myappname’][‘dbcollat’] = ‘utf8_general_ci’;
$db[‘myappname’][‘cachedir’] = ”;
$db[‘myappname’][‘socket’] = ‘/cloudsql/APPENGINE-ID:DATABASE-INSTANCE-ID’;

Viola,您的 CodeIgniter 应用程序现在应该能够连接您的 Google Cloud MySQL 数据库并与之通信!

现在,如果您想要真正喜欢并启用数据库缓存,可以更改 CI 代码以使用 memcache(最快)或 Google Cloud Storage(更有保证的持久性),但我不会在本博客中介绍这一点……

礼貌地回答http://arlogilbert.com/post/67855755252/how-to-connect-a-codeigniter-project-to-google-cloud

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 CodeIgniter 连接到 Google Cloud SQL 数据库? 的相关文章

  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • App Engine 上的 Django 与 webapp2 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 错误代码:1305。函数或过程不存在

    因此 我在 MySQL 中创建一个函数 然后尝试向用户授予使用该函数的权限 但我无法这样做 这就是我正在做的 DELIMITER USE rxhelp36 scbn DROP FUNCTION IF EXISTS businessDayDi
  • 如何在 MySQL 中测试 Select for Update

    我正在表演SELECT FOR UPDATE或 InnoDB 表的行级锁定 我的目的是只有一个请求可以读取同一行 因此 如果两个用户同时请求相同的数据 其中只有一个人获取数据 即第一个触发查询的人 但是我如何测试锁定是否已放置 因为我正在通
  • Android Realm.io:行/对象不再有效

    这是我的删除功能 它确实找到了workday1 object public static void delete Context context Workday workday Realm realm getRealm context re
  • 实现软删除的最佳方法是什么?

    目前在做一个项目 我们要对大部分用户 用户角色 实现软删除 我们决定添加一个is deleted 0 数据库中每个表的字段并将其设置为 1 如果特定用户角色点击特定记录上的删除按钮 现在为了将来的维护 每个SELECT查询需要确保它们不包含
  • 为什么现在()? (客观化)

    为什么我想要异步加载 Objectify 实体 异步加载到底意味着什么 根据客观化有关加载的文档 https code google com p objectify appengine wiki BasicOperations Loadin
  • 在 jQuery AJAX 成功中从 MySql 获取特定响应

    好吧 我有这个 ajax 代码 它将在 Success 块中返回 MySql 的结果 ajax type POST url index php success function data alert data My Query sql SE
  • Codeigniter:在 Windows XP 中将错误显示为“无法选择指定的数据库:项目”

    我使用 Windows XP 并使用 EasyPHP 作为服务器 我已将 Codeigniter 与 TankAuth 集成 但是 当我尝试打开我的作业文件夹时 它显示错误 如下所示 Unable to select the specifi
  • 如何通过 SQL 表关联 SQL 中的实体

    我是数据库设计的初学者 我需要为项目创建数据库 我可以用面向对象的术语解释我想要做什么 值得庆幸的是 数据库专家会很友善地向我解释如何在数据库方面处理这个问题 我想创建一个与位置实体 州 城市 有关系的用户 ID 名称 实体 所以在编程语言
  • SQLite中的ROWID是自动设置的吗?

    所以 我在 Ionic 上有这个应用程序 它使用SQLite ngCordova 插件 https github com litehelpers Cordova sqlite storage用于内部存储 在其上 我使用以下命令创建一个表 d
  • rake db:migrate db:reset 和 db:schema:load 之间的区别

    和 之间的不同rake db migrate and rake db reset我很清楚 我不明白的是如何rake db schema load与前两者不同 只是为了确保我在同一页面上 rake db migrate 运行尚未运行的迁移 r
  • 删除行导致锁超时

    当我尝试从表中删除行时 我不断收到这些错误 这里的特殊情况是我可能同时运行5个进程 该表本身是一个 Innodb 表 约有 450 万行 我的 WHERE 子句中使用的列没有索引 其他指数按预期运行 这是在事务中完成的 首先删除记录 然后插
  • 获取带有计数的不同记录

    我有一张桌子personid and msg列 personid msg 1 msg1 2 msg2 2 msg3 3 msg4 1 msg2 我想得到总计msg对于每个personid 我正在尝试这个查询 select distinct
  • 什么是时序数据库?

    What is 时间序列数据库例如InfluxDB 我应该何时 何地使用它 请给我它的业务场景示例 检查wiki https en wikipedia org wiki Time series database 时间序列数据库 TSDB 是
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • MySQL 转储未知选项“-no-beep”

    在旧服务器上我使用了mysql转储命令来备份 MySQL 数据库 在新服务器上 MySQL 版本为 5 6 相同的命令给出了错误 unknown option no beep 无论它插入什么 我也在互联网上搜索过 但找不到任何帮助 在 my
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器

随机推荐

  • MacOS OmniSharp 在 vscode 中超时错误

    今天早上我启动了 vscode 1 13 1 并想用 C dotnet core 编写代码 但我遇到了同样的错误 您可以在 google 中找到该错误 但在当前版本的 OmniSharp 中 Omnisharp 正确地看到了我的项目 但没有
  • 从 Java 调用存储过程

    我正在尝试从我的 Java 应用程序调用 mySQL 存储过程 当我从 mySQL 工作台调用存储过程时 它可以工作 并且根据我发送的参数获得正确的行数 当我尝试从 Java 调用它时 问题就出现了 我没有得到任何结果 也找不到原因 我一直
  • 验证当前经过身份验证的 Windows 用户是否具有委派权限

    鉴于我有一个使用 Windows 身份验证的 WCF 服务 并且我想模拟它们并调用另一个 WCF 服务 如下所示 using ServiceSecurityContext Current WindowsIdentity Impersonat
  • sklearn凝聚聚类:动态更新聚类数量

    sklearn cluster AgglomerativeClustering 的文档提到 当改变集群数量并使用缓存时 计算完整的树可能是有利的 这似乎意味着可以首先计算完整的树 然后根据需要快速更新所需集群的数量 而无需重新计算树 使用缓
  • 分割 ActionBar 中的 withText

    我遇到一个问题 如果ActionItem有图标和文本 并且ActionBar被分割后 即使showAsAction always withText 有没有办法强制显示文字 withText是对系统的一个提示 在宽度受限的设备或配置上 系统可
  • NetBeans 设计视图大小 - 放大/缩小

    快速提问 是否可以放大 缩小 NetBeans 中的 设计 视图 我正在用 Java 制作一个具有固定框架大小的应用程序 我的笔记本电脑是全屏 我在设计视图中看不到整个框架 这有点不方便 我发现可以放大 缩小代码 源视图 的信息 但在设计视
  • dunder 方法是继承的吗?

    如果我定义 getstate and setstate 在父类中 子类可以继承这些方法吗 有一些相关的讨论这个答案 但仅限于前面带有双下划线 dunder 的方法 一些额外的信息 我这样做是为了定义我的类的序列化 pickling 行为 P
  • 将泛型类型参数显式转换为任何接口

    In 泛型常见问题解答 最佳实践 says 编译器将允许您将泛型类型参数显式转换为任何接口 但不能转换为类 interface ISomeInterface class SomeClass class MyClass
  • h:selectOneRadio 在一行中渲染所有选择项,如何在新行中渲染每个项目?

    我有一个selectOneRadio标签和所有单选按钮选项显示在一行上 如何使其每行 行一个选项 要了解标签的行为及其所有可用属性 一个很好的起点是标签文档 这是摘录的相关性
  • 更改 java 12+ 中的静态最终字段

    这个问题与使用 Java 反射更改私有静态最终字段 在那里 有人问 如何改变private static final多变的 但是 该问题的答案在 Java 12 中不起作用 因为您无法访问私有变量java lang reflect Fiel
  • 您可以将存储过程设置为始终以特定用户身份执行吗?

    我想设置一个存储过程以始终作为特定域用户执行 无论用户调用或尝试执行该过程 我都可以强制该过程以另一个用户的身份执行吗 我们的供应商之一将其应用程序硬编码为使用本地数据库帐户来执行某些过程以导入某些 csv 文件 不幸的是 我们无法将 cs
  • 请帮助完成非常简单的 Android 小部件按钮单击。变得非常沮丧。 :(

    我已经仔细研究了我能找到的每一个例子 并且浏览了谷歌的官方文档 我想做的就是通过单击小部件上的按钮创建一个 Toast 通知 我可以让小部件 和按钮 出现 但我无法触发我的意图 我见过几个例子 显示了以不同的方式进行此操作 但我就是无法让它
  • django allauth 空用户名导致 postgres 数据库中出现重复键

    姜戈 1 8 16 django allauth 0 27 0 使用 postgres 作为数据库 我的应用程序不使用用户名 仅使用电子邮件地址作为用户 ID 所以我使用以下设置 ACCOUNT AUTHENTICATION METHOD
  • 在使用reactjs发送POST请求之前,如何等待firebase检查用户是否有效?

    我使用以下代码来获取用户 idToken 然后将其作为授权标头发送到后端 const user firebase auth currentUser const idToken await user getIdToken 像这样发送 var
  • 在过滤的每一步打印数据框尺寸

    我正在使用 tidyverse 过滤出数据帧 并希望在中间对象的尺寸 或 nrows 的每个步骤中进行打印 我以为我可以简单地使用 magrittr 的三通管操作器 但它不起作用 我想我理解 T 形管背后的概念 但无法弄清楚出了什么问题 我
  • MATLAB 中的循环缓冲区,**无需**复制旧数据

    这里有一些很好的帖子 例如this one 了解如何在 MATLAB 中创建循环缓冲区 然而 从观察它们来看 我认为它们不适合我的应用程序 因为我正在寻找的是 MATLAB 中的循环缓冲区解决方案 它不涉及任何旧数据的复制 举一个简单的例子
  • 仅在表中保留用户的最后 5 个搜索结果

    我需要将用户的最后 5 个搜索结果保留在表中 我编写了一个脚本来删除其他行 但它不起作用 DELETE FROM SELECT ROW NUMBER OVER ORDER BY search time DESC AS row number
  • 在函数中通过引用向 data.table 添加新列并不总是有效

    在编写一个依赖于data table 我发现了一些奇怪的行为 我有一个函数可以通过引用删除并重新排序某些列 并且它工作得很好 这意味着data table我传入的内容被修改了 没有分配函数输出 我还有另一个功能 它添加了new然而 这些变化
  • 从 PNG 到位图图像。透明度问题。

    我有一些问题 我正在尝试将 png image 从资源加载到 viewModel 中的 BitmapImage 属性 如下所示 Bitmap bmp Resource1 ResourceManager GetObject String Fo
  • 如何使用 CodeIgniter 连接到 Google Cloud SQL 数据库?

    我在 Google App Engine 上的 CodeIgniter 应用无法连接到我在 Google Cloud SQL 上的数据库 我尝试了很多事情 当我将数据库用户名 密码和数据库名称留空时 我的网站会加载 但是具有数据库调用的页面