问题标签 [mysqlnd]

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.

0 投票
6 回答
44720 浏览

php - 如何知道 MySQLnd 是否是活动驱动程序?

也许这是一个显而易见的问题,但我想确定一下。

我怎么知道它 MySQLnd 是否是活动驱动程序?

我正在运行 PHP 5.3 和 MySQL 5.1.37。在 phpinfo() 中列出了 mysqlnd,但仅此我无法确定我使用的是 MySQLnd 还是旧驱动程序...

phpinfo() 输出的提取

我正在使用 PDO,而 PDO 驱动程序说 mysql ...

0 投票
1 回答
887 浏览

php - 从 mysql 变形为 mysqli

我对 PHP 中的 mysqli 接口有点困惑。当我昨天着手将我的旧 mysql 代码更改为 mysqli 时,文档引导我走上了::prepare,::bind_params::execute.

在我努力处理结果的过程中,我最终编写了自己的 fetch_assoc - 并且遇到了我在 SO 上讨论的问题。一位评论员询问我没有使用什么::fetch_assoc。我什至没有注意到 mysqli_result 类。当我将我的 mysqli 代码从::preapreto变形时::query,结果处理变得更加容易 - 除了一个例外:当我以前用来::bind_results提取列时,产生的 PHP 关联数组将携带正确的数据类型;当我现在使用::fetch_assocetc 时,我得到的只是一个字符串数组。

我现在正在编写一个转换器。我只是想,既然我在理解 mysqli 库时已经犯了一个主要错误,我最好在这里发帖,看看是否有一种“官方”的方式来获取类型一致的关联结果数组。

0 投票
1 回答
5099 浏览

php - 是否可以启用 MySQL 本机驱动程序 (mysqlnd)?

可能重复:
调用未定义的方法 mysqli_stmt::get_result

我的网络主机有 PHP 5.3.10 并且我正在使用mysqli,但某些功能(例如get_result() )不起作用,因为它需要mysqlnd.

我做了一些测试,似乎mysqlnd没有使用。可以启用它或需要重新安装 PHP(我不能这样做,因为它是一个网络托管)。

我不想改变我的代码在没有它的情况下工作。

0 投票
2 回答
2283 浏览

mysql - MySQL/PDO 截断数据

$book是一个 7kb 的字符串。如果使用 PHP PDO 执行此查询exec,则monograph列 (LONGTEXT) 数据在 6765 个字符处被截断:

但是,如果我打印查询并使用 SQL 客户端(绕过 PHP)执行它,它会将所有数据插入数据库。这让我觉得这是我还不熟悉的 PHP 设置。

请注意,如果我使用准备好的语句(包括使用 PDO::PARAM_LOB),也会发生同样的情况。

$bookexec 在https://gist.github.com/79d5fe1050bbb0e2fac8 (7157)之前转储的值。最终在数据库中的实际数据https://gist.github.com/df49d4a9707660b8b60b (6765)。我不明白这种数据截断在技术上是如何可能的,因为整个查询都传递给了 MySQL(否则会弹出 SQL 语法错误)。

如果我使用 SQL 客户端执行输出 (https://gist.github.com/a05fe4c033e74897b82b),这是最终在数据库中的数据https://gist.github.com/88870fe26a3ae40e991e (7157,预期)。

PDO 使用 UTF8 连接启动。


更新 2012 年 7 月 25 日 04:11 EST

现在我知道这是编码问题。

但是,我不确定该怎么做。我与 MySQL 的连接已经是 unicode。

/etc/my.cnf配置为在服务器范围内使用以下设置。

0 投票
3 回答
56001 浏览

php - 致命错误:调用未定义的方法 mysqli_result::fetch_all()

我在 Ubuntu 10.04 中遇到了 PHP 问题。当我尝试使用 mysqli_result::fetch_all 时出现此错误:

调用未定义的方法 mysqli_result::fetch_all()

但是,它适用于 Windows XP。

编码:

我不想将fetch_assoc与循环一起使用,因为我将结果发送到另一层进行处理。

我正在使用 PHP 5.4.4。和php -m | grep mysql没有出现的 mysqlnd 模块。我该如何安装它?这可能是问题吗?

0 投票
1 回答
503 浏览

php - MAMP 与 MySQL 自然驱动程序

所以我一直在与 MAMP 合作,在我的计算机上本地开发一个站点,但真正困扰我的一件事是 MAMP 没有附带 MySQL Natural Driver for PHP。所以我不能使用可爱的get_result()功能。我什至尝试使用驱动程序手动编译 PHP,但很快就火了。如果无法使用 mysqlnd 设置 MAMP,那么有人可以解释获得它的最佳方法是什么?运行 Mac OS X 10.7 Lion。

0 投票
0 回答
63 浏览

mysql - 从 PHP5.3.13 命令行界面连接 MySQL 4.1

可能重复:
无法使用旧身份验证连接到 MySQL 4.1+

我发布这个问题是因为我找不到任何可行的解决方案。所以请见谅。

我正在使用 mysql 5.5.24 和 PHP 5.3.13(都来自 WAMP2 安装)

虽然我能够通过网络服务器从 php 脚本连接到数据库,但相同的脚本会出现以下错误。

无法连接:mysqlnd 无法使用旧的不安全身份验证连接到 MySQL 4.1+。请使用管理工具通过命令 SET PASSWORD = PASSWORD('your_existing_password') 重置密码。这将在 mysql.user 中存储一个新的、更安全的哈希值。如果此用户在 PHP 5.2 或更早版本执行的其他脚本中使用,您可能需要从 my.cnf 文件中删除 old-passwords 标志

这里有几件事我已经:

  1. 我尝试通过 mysql 控制台更改密码。
  2. 实现了特权。
  3. 将 phpMyAdmin 的 config.ini.php 中的以下行从

    $cfg['Servers'][$i]['extension'] = ' mysqli ' 到

    $cfg['Servers'][$i]['extension'] = ' mysql '

无济于事。

错误信息是指这个版本的 mysql 中不存在的my.cnf文件。所以我认为它一定是my.ini,但没有提到旧密码。

我怎样才能让这个东西工作?

0 投票
6 回答
103343 浏览

php - 如何为 php 启用 mysqlnd?

我已经安装并运行了 PHP(版本:5.3.17),我想切换到 mysqlnd(在 phpinfo 中,mysqlnd 根本不存在)。

我读到要设置它,您需要更新./configure命令:

当我尝试安装它时yum install php-mysqlnd出现错误:

0 投票
2 回答
589 浏览

php - 使用 apc 编译 mysqlnd_qc 时出错

运行命令pecl install mysqlnd_qcAPC启用启用安装缓存我收到以下错误:

如果没有启用 APC,它编译得很好......

PHP版本:5.3.17

在 Amazon RDS 上运行。

静态编译 APC 和 MySQL Query Cache 是什么意思?

它是如何完成的?


更新1:

由于我还没有设法用 APC 编译 mysqlnd_qc,所以我尝试用memcached. 这是一个有趣的问题。该./configure命令无法识别peclmemcache. 我发现选项输入错误...

所以我pecl在询问选项时终止了安装并自己运行了以下命令:

所以memcached现在可以使用它了。

如果在Fedora(我猜也是RedHatand CentOS)上运行,则可以使用rpm


更新 2:

我设法用 APC 编译,请参阅下面的详细答案。

0 投票
2 回答
5469 浏览

php - 在托管网站中安装 mysqlnd

我正在用 PHP - MySQL 开发一个网站。这里有几点需要注意:

  • 我正在使用MySQLi API 进行数据库访问。
  • 在我本地安装的 XAMPP(Windows 7 机器)中,PHP 版本是5.3.8,MySQL 版本是mysqlnd 5.0.8-dev - 20102224
  • 我在免费托管服务器上托管了该网站,用于测试“cuccfree.com”。这里 PHP 版本是5.3.14, MySQL 版本是5.1.66。与许多其他托管公司相比,它仍然对 MySQLi 有更好的支持。
  • 在 phpinfo'ing 两者中,本地机器显示已安装mysqlnd驱动程序,但托管服务器尚未安装。
  • 我为 MySQLi 创建了一个包装类,它使用函数mysqli_stmt::get_result()获取 ResultSet 。这个函数在我的本地机器上有效,但在 cuccfree.com 托管服务器上无效,因为mysqli对象没有名为get_result()的方法。不过,mysqli_stmt对象已准备好成功绑定参数。
  • php.netmysqli_stmt的手册页说,要使用mysqli_stmt::get_result(),我们需要安装mysqlnd驱动程序。
  • 服务器的配置提供了mysqli_stmt::bind_object()的使用。但get_result()对我来说似乎是一个更好的选择,因为我们可以得到数组形式的结果。我已经使用以下行重写了函数以接受可变数量的参数:

    call_user_func_array(array($stmt, 'bind_param'), $params);

其中 $params 是一个参数数组。

  • 使用 bind_object(),我必须将返回的每一列绑定到一个变量。在这种情况下,我无法创建一个包装类函数来一次性处理所有 SQL 查询。

我找了几家托管公司,与许多公司的客户支持交谈并邮寄,包括 GoDaddy 和 Manas Hosting,他们不提供mysqlnd的使用。他们非常合乎逻辑地坚持使用 VPS 或专用服务器。显然,这两种建议的选择都非常昂贵,即使在入门级也是如此。

那么,最后我的问题是,我们可以将 mysqlnd 安装/嵌入到 Linux 服务器上的网站中吗?如果没有,我有什么替代方法可以阻止我更改整个网站的代码,这将花费我很多天?

问候