问题标签 [libmysql]
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 - 如何在 PHP 中“禁用”mysqlnd 本机类型转换支持
背景故事
我们正在将我们的项目代码库从 PHP 5.3 迁移到 CentOS 6 平台上的 PHP 7.0。
旧堆栈使用带有 PHP 5.3 libphp 模块 + libmysql 的 Apache,新堆栈使用带有 PHP 7.0 FPM + mysqlnd 的 Nginx。
我们将它们配置为并行运行,以便在一切准备就绪时轻松切换到新版本(感谢 SCL)。
问题(ish)部分
mysqlnd 的一个很好的特性是它能够自动返回数据库中使用的正确类型的数据库字段(VARCHAR 作为字符串,MEDIUMINT 作为整数等)。
不过,可悲的是,这有点不利于我们。
该项目的一部分是为原生应用程序(Android 和 iOS)提供 API 服务,以便与我们系统中的其他各种服务进行通信。
由于过去几年的一些糟糕的设计决策(我无法控制),由于 libmysql 支持这一点,一些整数作为字符串发送到移动应用程序。因此,当我们切换 PHP 系统时,它开始破坏我们的移动应用程序,因为类型不再匹配。
为了避免升级中的任何进一步延迟,因为我们的最终用户可能需要几个月的时间来升级他们的移动应用程序来修复这些问题,我们开始研究如何以某种方式回到以字符串形式返回所有内容的旧方式从mysqlnd中的数据库。
到目前为止,我的谷歌搜索还没有产生任何有用的结果。我也开始认为这是 mysqlnd 的设计方面,它无法真正实现。
所以最后我的问题
我猜有不少人经历过类似的升级过程,所以我想就您可能遇到的障碍提出任何建议。
是否可以“禁用”对 PHP 的自动类型转换?是否有任何可行的解决方法来保留对移动应用程序的代码库支持(除了通过 API 代码库并将所有内容转换回字符串)?
debian - debian 拉伸 - libmysqlclient.a
一开始我不是debian的忠实粉丝,我目前面临的这个问题让我讨厌它。
我想要 debian 上的 libmysqlclient 的静态版本,但似乎无法找到。
我已经用 libmysql* 和 libmariadb* 安装了所有东西,包括开发包。
我只得到共享库。
请问有谁知道如何解决这个问题?
python - 针对 mariadb-connector-c 构建 python-mysqlclient
我正在尝试在 Conda 环境中针对mariadb-connector-c编译python-mysqlclient 。这意味着安装前缀不是但是,例如,。我也想用插件。/usr/local
$HOME/conda/envs/test
auth_gssapi_client.so
两个包都构建,但import MySQLdb
引发以下异常:
这样做的原因是mysqlclient只搜索lib/
,但
lib/mariadb
即使它配置了正确的路径并成功构建也不搜索。*.so
我可以通过将文件复制到(或通过创建符号链接)来解决这个问题lib/
,但是,它找不到 GSSAPI 插件......</p>
我以这种方式构建mariadb-connector-c 3.0.2:
我可以安装它并运行mariadb_config
它给出这个输出:
然后我以这种方式构建python-mysqlclient 1.3.12:
这个问题有两种可能的解决方案:
配置mariadb-connector-c直接把它的东西放进去
lib/
——我还没有找到关于如何做到这一点的文档。让python-mysqlclient尊重
mariadb_config
返回的路径——如何?
mysql - 如何过早完成 mysql_use_result() / mysql_fetch_row()?
我正在为 MySQL 5.5 编写我的第一个 C 客户端,并且偶然发现了文档中的以下页面。几乎在最后,它说(粗体强调我的,斜体强调不是我的):
mysql_use_result() 的一个优点是 [...]。缺点是[...]。此外,您必须检索所有行,即使您在检索过程中确定您已经找到了您正在寻找的信息。
最后一句话我不清楚。
1)如果我不遵循这条线会发生什么?
2)我认为如果我确定我有足够的信息,实际上必须有一种方法可以过早地结束获取行(否则,这整个事情在我看来没有多大意义)。
我知道如果我只是停止获取行然后尝试执行下一条语句,可能会发生一些不好的事情,但是没有像 mysql_finish_fetch() 或类似的函数吗?
如果我打电话会发生什么mysql_free_result()
?即使我还没有获取所有行,这也应该释放结果,因此在检索过程中调用它并继续我想做的任何事情都应该是安全的。我在这里错了吗?
mysql - 编译 MySQL C API 客户端不链接 libmysqlclient.so.20
我正在为 Zabbix 编写一些可加载的模块,例如编译共享对象。我编写了一个使用 MySQL C API 从表中读取一些数据的程序,它相当标准,包括:
我的 gcc 命令看起来像这样(为清楚起见,扩展了 mysql_config):
/usr/lib64/mysql 的内容:
.so 在开发盒上编译并运行良好,但将其复制到未安装 mysql-devel 的盒子会产生以下错误:
我只能假设这意味着 libmysqlclient.so.20.so 没有被捆绑到我的 .so 中。我在这里几乎是新手,所以如果有人能提出建议,将不胜感激。
mysql - select count(*) from 在 C 中使用 MySQL 函数给出错误的结果我试图拒绝。来自 Oracle DB 中表的条目。该应用程序是用 C 开发的,我正在使用 mySql lib 来访问数据库。正如我所说,我在 db 层使用 Oracle,在应用程序中使用 mysql 函数,这是使用 libmysqlora 完成的。除了一件事,一切都运行良好,当我发出类似 'select count(*) from 的查询时,我只得到实际计数的前 3 位数字。以下是我
我试图拒绝。来自 Oracle DB 中表的条目。该应用程序是用 C 开发的,我正在使用 mySql lib 来访问数据库。正如我所说,我在 db 层使用 Oracle,在应用程序中使用 mysql 函数,这是使用 libmysqlora 完成的。除了一件事,一切都运行良好,当我发出类似 'select count(*) from 的查询时,我只得到实际计数的前 3 位数字。以下是我阅读此内容的完整代码:
对于表“目标”,当我计算 sqlplus 中的行数时:
但是当我为此使用上述功能时:
不仅对于这个表,对于我数据库中的每个其他表,该函数只返回计数值的前三位。这是什么原因?而且,我该如何解决这个问题?
默认情况下,React 会在每次组件获得 props 或 state 时重新渲染。
您可以进行一些检查,shouldComponentUpdate
然后决定是否重新渲染。
从文档:
使用 shouldComponentUpdate() 让 React 知道组件的输出是否不受当前状态或道具变化的影响。默认行为是在每次状态更改时重新渲染,并且在绝大多数情况下,您应该依赖默认行为。
当接收到新的道具或状态时,应该在渲染之前调用 shouldComponentUpdate()。默认为真。初始渲染或使用 forceUpdate() 时不会调用此方法。
目前,如果 shouldComponentUpdate() 返回 false,则不会调用 componentWillUpdate()、render() 和 componentDidUpdate()。
返回 false 不会阻止子组件在其状态更改时重新渲染。
TLDR;返回 false inshouldComponentUpdate
将阻止重新渲染,除非状态实际更改。
我试图拒绝。来自 Oracle DB 中表的条目。该应用程序是用 C 开发的,我正在使用 mySql lib 来访问数据库。正如我所说,我在 db 层使用 Oracle,在应用程序中使用 mysql 函数,这是使用 libmysqlora 完成的。除了一件事,一切都运行良好,当我发出类似 'select count(*) from 的查询时,我只得到实际计数的前 3 位数字。以下是我
我试图拒绝。来自 Oracle DB 中表的条目。该应用程序是用 C 开发的,我正在使用 mySql lib 来访问数据库。正如我所说,我在 db 层使用 Oracle,在应用程序中使用 mysql 函数,这是使用 libmysqlora 完成的。除了一件事,一切都运行良好,当我发出类似 'select count(*) from 的查询时,我只得到实际计数的前 3 位数字。以下是我阅读此内容的完整代码:
对于表“目标”,当我计算 sqlplus 中的行数时:
但是当我为此使用上述功能时:
不仅对于这个表,对于我数据库中的每个其他表,该函数只返回计数值的前三位。这是什么原因?而且,我该如何解决这个问题?
默认情况下,React 会在每次组件获得 props 或 state 时重新渲染。
您可以进行一些检查,shouldComponentUpdate
然后决定是否重新渲染。
从文档:
使用 shouldComponentUpdate() 让 React 知道组件的输出是否不受当前状态或道具变化的影响。默认行为是在每次状态更改时重新渲染,并且在绝大多数情况下,您应该依赖默认行为。
当接收到新的道具或状态时,应该在渲染之前调用 shouldComponentUpdate()。默认为真。初始渲染或使用 forceUpdate() 时不会调用此方法。
目前,如果 shouldComponentUpdate() 返回 false,则不会调用 componentWillUpdate()、render() 和 componentDidUpdate()。
返回 false 不会阻止子组件在其状态更改时重新渲染。
TLDR;返回 false inshouldComponentUpdate
将阻止重新渲染,除非状态实际更改。
c++ - MySQL 事务和缓冲的请求列表
我有一个 C++ 代码,可以根据这些文件的内容解析文件并更新 MySQL 数据库。我在 Windows 10 和 MySQL 5.7 中运行我的代码,我的基础使用 InnoDB 引擎。MySQL 调用是通过我自己的 libmysql 包装器执行的。
为了优化此代码,我将更新请求附加到缓冲区中,直到达到缓冲区的最大大小,然后同时发送整个缓冲区(包含 N 个更新)。整个过程在单个事务中完成。
这是我的代码的外观:
SendRequest(string Request) 的实现基本上是:
但是,在提交事务时,事务恰好已被破坏:MySQL 指示状态不正确,无法提交。我试图做同样的事情,但只发送一个请求,并且在提交时不会发生此错误。
所以,我的两个问题是:
- 你知道为什么一次发送多个请求会破坏我的交易吗?
- 你认为使用缓冲的请求列表真的可以优化我的代码吗?
mysql - MariaDB 服务器在 600 秒后超时客户端连接
我的 MariaDB 服务器在 600 秒(10 分钟)不活动后使我的 C++ 客户端(使用 libmariadb)超时,我不知道为什么,因为我找不到任何指定该数字的配置超时。
这是我的代码,我在其中执行一个简单的 SELECT 查询,等待 11 分钟,然后再次运行相同的查询并得到“服务器消失”错误:
服务器进程的标准输出报告它使我的连接超时:
查看 tcpdump 捕获,我还可以看到服务器向客户端发送 TCP FIN 数据包,这会关闭连接。
我被难住的原因是因为我没有更改任何默认超时值,甚至都不是 600 秒:
那么为什么服务器会超时我的连接?根据文档,我原以为是因为wait_timeout
server 变量,但默认为 8 小时...
顺便说一句,我正在使用 MariaDB 10.0 和 libmariadb 2.0(来自 Ubuntu Xenial Universe 存储库)
编辑:这是捕获断开连接的 tcpdump 捕获的图像。我的 Wireshark 过滤器是tcp.port == 55916
,所以我正在查看进出这个客户端连接的流量。服务器发送的 FIN 数据包是数据包 1199,正好在前一个数据包 (884) 之后 600 秒。
c++builder - DBX 错误:驱动程序无法正确初始化
DBX 错误:驱动程序无法正确初始化。客户端库可能丢失、未正确安装、版本错误,或者系统路径中可能缺少驱动程序。
当尝试打开 SQL 窗口(在数据资源管理器面板中右键单击 MySQLConnection)或尝试通过在 TSQLConnection 对象上执行 Open() 方法在代码中打开连接(已编译的应用程序)时,会发生上述错误。
尝试将 libmysql.dll 和 libmysqld.dll 放在 Windows\System32、Windows\SysWOW64 和 project\Win32\debug 中。使用 32 位和 64 位版本的 DLL 进行测试。
我错过了什么?
工具链:Windows 10 64 位、Embarcadero® C++Builder 10.2 版本 25.0.31059.3231(社区版)、MySQL 5.7.16 64 位
php - Laravel 在表中添加额外字段会导致一般错误:2057
我的问题很简单,但我找不到这个特定问题的任何答案。
问题是,我在 Laravel 中有这个迁移:
如您所见,我对一个字段进行了评论。但是,当我删除 // 并运行迁移(在干净的数据库上)并且当我尝试执行登录时,它会返回:
此验证代码的主要部分是由 Laravel artisan make:auth 命令默认生成的。
问题是,我已经有一些额外的字段并且它确实有效,但是由于某种原因,当我添加“guid”新字段(或另一个,名称无关紧要)时,它破坏了我错过的东西......
编辑:它与 MySQL 数据库有关。我将其从 Shared Hosting MariaDB 服务器更改为 Google Cloud (5.7),它正在工作......
EDIT2:通过使用另一个名称创建另一个数据库来解决它(用相同的名称重新创建不起作用)并且它再次开始工作......