如何使用 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 数据库? 的相关文章

  • 在 Java 中将日期从 UTC 转换为 PST

    我需要将日期从 Google App Engine 本地服务器时区转换为 Java 中的太平洋时间 我尝试使用 Calendar calstart Calendar getInstance calstart setTimeZone Time
  • 使用 php 和 mysql 计算日期差(以小时为单位)

    我如何使用 php 和 mysql 找到以小时为单位的日期差异 Use TIMEDIFF http dev mysql com doc refman 5 1 en date and time functions html function
  • 如何在 Sequelize 现有模型中添加列?

    我使用此命令添加了模型和迁移文件 node modules bin sequelize model generate name User attributes firstName string lastName string email s
  • MySQL Tinybit(1) 通过视图的列

    我有一个连接 2 个表的视图 其中一个表具有表示布尔值的tinyint 1 类型的列 该表在连接时并不总是有条目 因此当行丢失时视图需要采用 0 false 值 我希望视图公开 TINYINT 1 类型且 NOT NULL 类型的列 因为它
  • 重定向到上一页时如何发送变量数据

    在完成特定任务后 我使用以下代码将用户重定向到上一页 if isset SERVER HTTP REFERER this gt session gt set userdata previous page SERVER HTTP REFERE
  • MySQL通过UPDATE/DELETE合并重复数据记录

    我有一个看起来像这样的表 mysql gt SELECT FROM Colors ID USERNAME RED GREEN YELLOW BLUE ORANGE PURPLE 1 joe 1 null 1 null null null 2
  • PDO获取最后插入的ID

    我有一个查询 我想获取插入的最后一个 ID 字段ID是主键并且自动递增 我知道我必须使用这个声明 LAST INSERT ID 该语句适用于如下查询 query INSERT INTO cell place ID VALUES LAST I
  • 错误代码:1062。重复条目“PRIMARY”

    因此 我的教授给了我表格将其插入数据库 但是当我执行他的代码时 MySQL 不断给出错误代码 1062 这是冲突表和插入 TABLES CREATE TABLE FABRICANTES COD FABRICANTE integer NOT
  • 条件对列表的 In 子句

    有一个表 我需要通过在配对值列表中应用和条件来获取分页记录 下面是解释 假设我有一堂课Billoflading其中有各个领域 表中两个重要字段是 tenant billtype 我有一个包含值的对列表 tenant1 billtype1 t
  • 当我尝试计算 mysqli 结果时,为什么会收到警告?

    下面的代码会导致此警告 警告 count 参数必须是数组或实现 Countable 的对象 为什么要这样做 如何防止出现警告 if isset GET edit sonum GET edit update true result mysql
  • Laravel Eloquent 预加载:加入同一个表两次

    我有一个users表和一个约会桌子 在约会表中 我有两个用户 ID customer id staff id 我想检索所有带有客户姓名和员工姓名的约会 users table id name appointments table id st
  • MySQL 薛定谔表:存在,但不存在

    我遇到了最奇怪的错误 有时 在创建或更改表时 我会收到 表已存在 错误 但是 DROP TABLE 返回 1051 未知表 所以我得到了一个无法创建 无法删除的表 当我尝试删除数据库时 mysql 崩溃了 有时它有助于创建另一个具有不同名称
  • Codeigniter PHP - 在锚点加载视图

    我在一个长页面的底部有一个表单 如果用户填写了表单但它不验证页面是否以典型的 codeigniter 方式重新加载 this gt load gt view template data 然而 由于表单位于页面底部 我需要将页面加载到那里 就
  • 使用表白名单选项更新 Debezium MySQL 连接器

    我正在使用 Debezium 0 7 5 MySQL 连接器 并且我试图了解如果我想使用以下选项更新此配置 最好的方法是什么table whitelist 假设我创建了一个连接器 如下所示 curl i X POST H Accept ap
  • DataTables 第 2 页的分页未调用放大弹出窗口

    所以我有这个启用分页的数据表 我编码了一种方式 以便用户可以编辑表的行 当用户调用它在放大弹出窗口中打开的编辑页面时 它在第 1 页 从第 2 页起都运行良好 DataTable 及其前面停止调用 Magnific Popup 我只是不明白
  • 将非常大的Python列表输出保存到mysql表中

    我想将 python 生成的列表的输出保存在 mysql 数据库的表中 该表如下所示 mysql 中的 myapc8 表 https i stack imgur com 4B4Hz png这是Python代码 在此输入图像描述 https
  • 如何修复“未知变量'sql-mode = ANSI'”?

    使用 MySQL 5 5 27 在 my cnf 中我有 mysql sql mode ANSI 启动 mysql 控制台后我得到 unknown variable sql mode TRADITIONAL MySQL 文档服务器 SQL
  • 数据库分区 - 水平与垂直 - 规范化和行拆分之间的区别?

    我试图理解不同的概念数据库分区这就是我的理解 水平分区 分片 将表拆分为不同的表 其中将包含初始表中的行的子集 如果按大陆拆分用户表 我见过很多这样的示例 例如北美的子表 欧洲的另一个子表 ETC 每个分区位于不同的物理位置 理解 机器 据
  • MySQL 两种日期格式之间的转换

    用户将以这种格式输入日期 2017 年 2 月 17 日 存储在 mysql 数据库中的日期格式如下 2015 02 17 00 00 00 我想做的是 SELECT FROM insurance where DATE FORMAT in
  • Guid.NewGuid().GetHashCode() 用于数据库

    这对于用作数据存储 SQL Server 的 ID 可靠吗 我会使用 guid 但我更喜欢数字值 A guid更有可能代表一个记录uniquely than a numeric value 随着 GUID 确保全球唯一性 GUID 可以跨数

随机推荐

  • 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 上的数据库 我尝试了很多事情 当我将数据库用户名 密码和数据库名称留空时 我的网站会加载 但是具有数据库调用的页面