也许这是一个显而易见的问题,但我想确定.
我怎么知道MySQLnd是否是主动驱动程序?
我正在运行PHP 5.3和MySQL 5.1.37.在phpinfo()中列出了mysqlnd,但只有这个我不能确定我是否使用MySQLnd或旧驱动程序...
提取phpinfo()输出
mysql
MySQL Support enabled
Active Persistent Links 0
Active Links 0
Client API version mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $
mysqli
MysqlI Support enabled
Client API library version mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $
Active Persistent Links 0
Inactive Persistent Links 0
Active Links 26
mysqlnd
mysqlnd enabled
Version mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $
PDO
PDO support enabled
PDO drivers mysql
pdo_mysql
PDO Driver for MySQL enabled …Run Code Online (Sandbox Code Playgroud) 我安装并运行了PHP(版本:5.3.17),我想切换到mysqlnd(在phpinfo mysqlnd中根本不存在).
我读到它为了设置它,你需要更新./configure命令:
./configure --with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
Run Code Online (Sandbox Code Playgroud)
当我尝试安装它时,yum install php-mysqlnd我收到一个错误:
---> Package php-mysqlnd.x86_64 0:5.3.17-1.26.amzn1 will be installed
--> Processing Conflict: php-mysql-5.3.17-1.26.amzn1.x86_64 conflicts php-mysqlnd
--> Finished Dependency Resolution
Error: php-mysql conflicts with php-mysqlnd
Run Code Online (Sandbox Code Playgroud) 我在Ubuntu 10.04中遇到PHP问题.当我尝试使用mysqli_result :: fetch_all时出现此错误:
调用未定义的方法mysqli_result :: fetch_all()
但是,它适用于Windows XP.
代码:
$result = $this->dbh->query('SELECT [...] ');
return $result->fetch_all(MYSQLI_ASSOC);
Run Code Online (Sandbox Code Playgroud)
我不想在循环中使用fetch_assoc,因为我将结果发送到另一个层进行处理.
我使用的是PHP 5.4.4.和php -m | grep mysql mysqlnd模块它没有出现.我该如何安装?这可能是问题吗?
我知道有很多问题与我的问题一样,但我希望你能帮助我找到另一个解决方案.
我们正在为我们的项目使用Symfony 2.5.10,PHP 5.4.44和MySQL 4.1.20.
每当我尝试登录系统或任何与数据库连接有关的行为时(例如使用FOS命令添加新用户),我都会收到此错误:
SQLSTATE [HY000] [2000] mysqlnd无法使用旧的不安全身份验证连接到MySQL 4.1+.请使用管理工具使用命令SET PASSWORD = PASSWORD('your_existing_password')重置密码.这将在mysql.user中存储一个新的,更安全的哈希值.如果在PHP 5.2或更早版本执行的其他脚本中使用此用户,则可能需要从my.cnf文件中删除旧密码标志
我们已经尝试设置old_passwords中my.cnf为0,重启MySQL,为MySQL用户设置新密码并重新启动MySQL,但仍然是相同的.每当我们在查询窗口中运行它时:
SELECT user, Length(Password) FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)
它仍然显示16作为我们正在使用的用户的密码长度.并且在检查mysql服务器变量和设置时,old passwords也是ON(即使我们已经在my.cnf中将old_password设置为0).
这可能有什么问题?我将衷心感谢您的帮助.
更新:与此同时,我们删除了db用户的密码,以便我们能够访问数据库.但是我仍在寻找其他解决方案,因为我在网上找到的解决方案(比如old_passwords=1在my.cnf中删除或评论,将old_passwords设置为0并设置新密码然后重启)对我来说不起作用.
另一个更新:通常,这个问题的解决方案将old_passwords在mysql中启动,但是,如PHP文档中所述,
新的mysqlnd库不读取mysql配置文件(my.cnf/my.ini).
那么这是否意味着设置old_passwords为0 in my.cnf没有用?我仍然没有找到解决这个问题的方法.
我们是否需要在所使用的任何平台上进行升级?在此先感谢您的帮助.
我有Windows 2003 Server.Apache 2.4.10, PHP 5.4.31 and MySQL 5.6.19安装.有两个wordpress网站在服务器上运行.
在phpinfo();下面的mysqlnd部分中说;
active_connections 18446744073709551563
Run Code Online (Sandbox Code Playgroud)
这个号码正常吗?如果不是我怎么能减少它?
我正在编写一个简单的测试脚本来了解MySQLi准备好的语句.该脚本将成为在处理结果时需要略微动态的函数的基础.我需要fetch方法作为一个类似于mysql_fetch_array()行为的数组返回.
我知道其中一些方法需要mysqlnd.我检查了phpinfo.Mysqlnd已安装并存在.见截图.

请注意,PDO在我的服务器上可用,但我需要在此时使用此脚本与MySQLi一起使用.!PDO将在本项目的后期进行研究.
require_once(__ROOT__ . '/config.inc.php');
$mysqli = new mysqli($config['db']['server'], $config['db']['username'], $config['db']['password'], $config['db']['database_name']);
$userid = 10;
$stmt = $mysqli->prepare("SELECT username, firstname, lastname FROM maj_user WHERE user_id < ?");
if ($stmt)
{
/* bind parameters for markers */
$stmt->bind_param('i', $userid);
/* execute query */
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_array())
{
echo 'We selected "' . $row['username'] . ' (' . $row['firstname'] . ' ' . $row['lastname'] . ')"' . PHP_EOL;
}
$result->close();
}
$mysqli->close();
Run Code Online (Sandbox Code Playgroud)
上面的代码导致:
致命错误 …
我想知道MySQL Native Driver和MySQL Client Library之间的区别
以及何时使用它们
我正在尝试将我的网站停靠.我已经启动并运行了Nginx和PHP,除了我无法连接到数据库之外它正在查找.当页面加载时我得到错误:
Fatal error: Uncaught Error: Class 'MySQLi' not found in /private/conn.php:8 Stack trace: #0 /public_html/index.php(2): require() #1 {main} thrown in /private/conn.php on line 8
Run Code Online (Sandbox Code Playgroud)
我在第8行的连接线是:
$db = new mysqli("$host", "$user", "$pass", "$db", "$port");
Run Code Online (Sandbox Code Playgroud)
现在这在我的旧设置上工作得很好但是因为转移到新的并安装php7.1.5我无法让它运行.现在,我没有使用mysqlnd所以这可能是我的误解,但mysqlnd包括mysqli驱动程序.
我该如何运行?或者我现在应该使用不同的驱动程序?
由于我已经将我的网站移动到新的vServer,我总是收到此错误消息
Fatal error: Call to undefined method mysqli_stmt::get_result()
Run Code Online (Sandbox Code Playgroud)
这些代码行正常工作
$mysql = new mysqli($db_host, $db_user, $db_password, $db_database);
$partys = NULL;
$res_partys = $mysql->query("SELECT * FROM party ORDER BY begin");
while($row_partys = $res_partys->fetch_array()) {
$partys[] = $row_partys;
}
$count_reg = $mysql->prepare("SELECT COUNT(*) FROM guestlist WHERE partyid = ?");
$count_reg->bind_param('i', $party['partyid']);
$count_reg->execute();
Run Code Online (Sandbox Code Playgroud)
但$count_res = $count_reg->get_result();失败了.Mysqli支持已启用.
Accorind到一些互联网资源我需要PHP MySQL本机驱动程序,但我只在我的Debian 7机器上安装了php5-mysql,因为安装php5-mysqlnd via apt-get install php5-mysqlnd会自动删除Froxlor,这是我的服务器管理面板.
是否还有其他方法可以安装mysqlnd,除非通过apt-get download php5-mysqlnddpkg 下载并安装它,因为这会因为未满足的要求而在每次跟随apt-get调用时抛出错误,并从源代码编译PHP包括mysqlnd?
问题
我们告诉 PDO 将每个问题包装成异常。在某些情况下,它会生成一些警告,然后才抛出异常。
它为什么这样做?
重复?
关于它没有关于 SO 的正确答案。最后一个问题是MySQL 上的 PHP PDO 异常 + 警告已经消失?但人们只是将其标记为重复而不是仔细回答。
接受的答案不回答为什么这样做以及何时这样做。所以我研究了一下,会回答的。