问题标签 [mdb2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - MDB2 断开连接并在重新连接时忘记字符集设置
我们最近调试了一个奇怪的错误。找到了解决方案,但解决方案并不完全令人满意。
我们使用 IntSmarty 本地化我们的网站,并使用我们自己的包装器将本地化的字符串存储在数据库中。IntSmarty 在其析构函数中保存它可能拥有的任何新字符串,从而导致数据库调用。
我们使用 MDB2 的 Singleton 实例对 MySQL 进行查询,连接后我们使用 SetCharset() 函数将字符集更改为 UTF-8。我们发现在进行最终插入时,由 IntSmarty 保存的字符串被解释为 ISO-8859-1。我们仔细查看了查询日志,发现 MySQL 连接在 IntSmarty 的析构函数被调用之前就断开了。然后它重新建立,但在新连接上没有发出“SET NAMES utf8”查询。这导致保存的字符串被 MySQL 解释为 ISO-8859-1。
似乎没有在 MDB2 上设置默认字符集的选项。我们对这个问题的解决方案是更改 MySQL 服务器配置,通过添加
到我的.cnf。这只解决了我们的字符集总是一样的问题。
那么,有什么方法可以防止在所有查询运行之前断开连接?我可以强制 MDB2 实例在其他所有操作之后被破坏吗?
打开持久连接有效,但不是理想的答案。
php - MySQL 准备好的查询是否为每会话一次查询提供了性能优势?
根据文档,如果您多次运行查询,准备好的查询会提供显着的性能优势,因为 MySQL 服务器解析查询的开销只发生一次。我想知道那里的“多次”到底是什么意思。
即,假设您有一个网页运行一次查询。现在假设该页面每秒被调用 50 次。从性能的角度来看,prepare() 查询是否更有意义(因此需要两次往返数据库服务器;一次准备查询,一次运行查询)或仅正常发送查询(只需要一次往返) ? MySQL 和/或 PHP mysqli 驱动程序是否足够聪明,可以意识到在之前的调用中何时准备()查询?
php - 当我不能使用 PDO 时,当我使用 MySQL 时,我应该使用哪个,pear MDB2 或 pear DB_DataObject?
几乎所有免费的虚拟主机服务器,
你不能使用 PDO + MySQL。
他们缺乏 PDO 驱动程序。
所以我正在考虑选择
梨MDB2,
或 DB_DataObject。
你向我推荐哪个?
给我你的意见!
php - 如何使用带有 PHPUnit 数据库的 MDB2 进行多项测试?
我使用 PHPUnit 数据库来测试一些使用 MDB2 的类。
一切都很好,因为我遇到了第二个测试,它返回一个错误:
捕获的异常:MDB2_Error 类的对象无法转换为字符串
当我用第二个测试代替第一个时,新的第一个测试是可以的,但第二个返回相同的错误!还有接下来的!
也许在第一次测试后 MDB2 连接关闭了?
这是我的构造函数:
MyDBA 返回一个单例。构造函数内部没有引发异常......
这是前两个测试:
php - PEAR MDB2 执行StoredProc 并返回结果集。可能的?值得?
在过去的几个小时里,我一直在努力完成这项工作。我有一个名为 get_log_entries 的简单存储过程:
它非常简单,它在两列中返回结果:item_id (int) 和 log_description (varchar)。
我正在尝试使用 MDB2 对象执行此操作,但到目前为止还没有运气。这是尝试执行此操作的代码:
在这一点上,这个很好的错误显示在消息中:
“_doQuery:[错误消息:无法执行语句] [上次执行的查询:CALL get_log_entries()] [本机代码:1312] [本机消息:PROCEDURE wh_search.get_log_entries 无法在给定上下文中返回结果集]”
现在我有几个问题:
1. 是否可以使用 MDB2 执行 SP 并返回结果集?
2. 还是自己为“本机”PHP-MySQL 函数编写一个包装类更好?
谢谢!
php - PHP:在带有 MYSQL 的 MDB2 中对字符串使用 quote()
我正在使用 Pear 的 MDB2 并且非常喜欢它,但是有些事情开始让我烦恼。我使用 mdb2 包的 quote 方法按以下方式构建 SQL 字符串:
(如本页示例中所述:http: //pear.php.net/manual/en/package.database.mdb2.intro-quote.php)
数据库中的一切看起来都不错。但是当我从数据库中提取数据时,仍然使用 MDB2,我似乎无法找到一种简单的方法来剥离由 quote 方法添加的引用。目前我正在使用stripslashes,但这似乎不正确。我在某处缺少设置吗?我是否以错误的方式使用该软件包?
谢谢你的帮助,莱夫
php - 如何从带有 JOINed 表的查询中获取所有字段值?
我有这个基本查询:
我正在使用MDB2
fromPEAR
执行它并读取返回值。
但不知何故,结果数组总是只包含order_positions
表中的字段!,即结果数组看起来像这样
虽然我希望它看起来像这样
我已经尝试了以下方法:
- 改变字段的顺序,即
code
首先,然后description
。 - 改变连接表的顺序。
- 使用完整的表名而不是别名。
- 改用“MySQL 连接”(
SELECT FROM table1, table2 WHERE table1.id = table2.id
) - 使用有和没有的别名
AS
。
其他一些事实:
- 在 MySQL 查询浏览器中执行此查询工作正常,返回所有字段。
order_positions
无论如何,这张桌子似乎是首选。加入其他表时,我仍然只能从该表中获取字段。
php - Pear Log MDB2 消息长度和错误
我最近用 PEAR 建立了一个 SQL 日志框架,一切正常。
但是,我认为消息字段 ( VARCHAR 200
) 的默认长度有点短,所以我在 phpmyadmin 中更改了我的数据库结构,将其增加到512
.
然而,我很快意识到这个变化完全停止了日志记录的工作。我迅速将长度改回200
。但是,即使在此更改之后,日志记录仍然会中断。我已将错误追溯到日志功能,但不幸的是它没有给我一个失败的具体原因。
所以,我的问题是双重的:
有没有人在使用 PEAR 日志记录时遇到过这个问题或类似的问题?
创建更长的消息字段的正确方法是什么?
php - PEAR 的替代品:PHP 5.3 上的 MDB2
多年来,我一直在 php 中使用 pear 包。我正在升级/移动使用 MDB2 pear 包的站点,并且尚未针对 PHP 5.3.X 进行更新。
在 5.3 中,MDB2 正在返回那些令人讨厌的新错误。
我知道我可以更改我的错误报告设置以摆脱它们,但我宁愿不做任何例外。无论如何,这些天还有其他人在使用 MDB2 并有解决方案吗?有没有类似的数据库包推荐?
php - 无法在 Pear MDB2 包中重新声明类 mdb2_error
我没有在我的 PC 上安装 pear,而是下载了软件包并将它们解压缩到我的 web-app 中的“libs”字典中。我的 web-app 的字典结构大致是这样的:
该应用程序在我的两台 PC 上运行良好,但在虚拟主机中运行时抛出“无法重新声明类 mdb2_error”错误。