如何在PHP中连接到MySQL数据库而不会因cPanel而出现错误?

How to connect in PHP to a MySQL database without getting errors due to cPanel?

提问人:LWC 提问时间:6/14/2023 最后编辑:DharmanLWC 更新时间:6/16/2023 访问量:704

问:

以下基本命令:

new mysqli($servername, $username, $password);
mysqli_connect($servername, $username, $password);

在 PHP 8.2+ 中被阻止 or (取决于您使用的是哪一个)似乎是由于 PHP 8.2: MySQLi 不能再使用 libmysqli 编译(建议使用库而不是库)。Uncaught Error: Class "mysqli" not foundUncaught Error: Call to undefined function mysqli_connect()mysqlndlibmysql

在cPanel中绕过它的方法是,如此处所述(以及此处的过去版本),是检查通常关闭的,因为显然有(默认情况下检查)是不够的。nd_mysqlimysqlnd

但是,由于我的主机解释了“禁用”nd_mysqli“的原因是因为推荐该模块”,那么是否建议PHP 8.2+使用另一个PHP命令从PHP连接到MySQL数据库,该命令不会触发任何错误或需要任何特殊设置?

MySQL in cPanel

php mysqli cpanel mysqlnd

评论

4赞 Félix Adriyel Gagnon-Grenier 6/14/2023
你的意思是,除了PDO?
1赞 maio290 6/14/2023
你读过PHP为你提供的东西吗?MySQL PHP 驱动程序概述 - 选择 API
2赞 Félix Adriyel Gagnon-Grenier 6/14/2023
我只是习惯了PDO,仅此而已。我呃......但是,真的不要认为您观察到的问题与您的文章有关。文章说的是,人们不能再用libmysql编译php,但是如果你的主机确实编译了它,如果libmysql不再可用,他们肯定会使用mysqlnd来编译它。我不相信 php 8.2 不再随 mysqli 一起提供,除非有人把事情搞砸了。您确定您实际上启用了 mysqli 扩展吗?
2赞 Félix Adriyel Gagnon-Grenier 6/14/2023
右。我想我开始看清楚了。我仍然对 1 感到困惑。为什么您的 cPanel 中没有 MySQLI 扩展框。我可以在我的身上看到一个(沿着nd_mysqli)。2. 到底是谁在做这种不推荐?3.为什么您无法继续使用MySQLI呢?在重写 mysqli 之前,我会开始寻找新的主机,主机必须为人们提供一种将 mysqli 与 php 8.2 一起使用的方法。
2赞 Phil 6/14/2023
这与任何事物的构建/编译方式无关。如果类/函数不可用,则尚未启用关联的扩展。就这么简单

答:

0赞 Dharman 6/16/2023 #1

推荐的扩展始终是 PDO。但是,如果您的网站已经使用 mysqli 编写,您甚至可以在 PHP 8.2 上继续使用它。

CPanel 很愚蠢,他们愚蠢的配置让很多人感到困惑。默认情况下,他们使用 libmysql 编译了 PDO 和 mysqli,并且只提供更好的 mysqlnd 变体作为带有前缀 nd_ 的非标准扩展。用户永远不应该使用 libmysql 变体,并且在 PHP 8.2 上,甚至不再可能为该库提供 mysqli。应始终启用的正确扩展包括:

  • nd_pdo_mysql
  • nd_mysqli

我不知道他们以 mysqlnd 的名义提供什么,因为它不是一个可以启用或禁用的扩展。将其作为配置中的选项提供是荒谬的。

我不明白为什么 cPanel 不推荐 nd_* 变体的原因。

另请参阅 https://stackoverflow.com/a/73902084/1839439

评论

0赞 LWC 6/17/2023
你能说PDO推荐而不是mysqli吗?另外,为什么PDO即使没有nd_pdo_mysql也能工作?
0赞 Dharman 6/17/2023
@lwc PDO 仍然可以针对 libmysql 库进行编译。因此,cPanel仍然提供两种变体。