与MySQL的远程连接通过命令行工作,但在从Web浏览器使用php的mysql_connect时失败


Remote connection to MySQL works via command line, but fails when using php's mysql_connect from a web browser

我正在尝试使用PHP的"mysql_connect()"函数连接到MySQL服务器,但连接失败。这是我的代码:

$con = mysql_connect("example.net", "myusername","") or die("Could not connect: ".mysql_error()); 

将此代码放在PHP脚本中,我尝试使用Web浏览器打开该脚本(该脚本存储在启用了PHP的远程主机上),但它不起作用。它也不会返回die错误。在$con之前回显某些内容会在浏览器中成功输出,而在该行之后没有任何输出。如果我输入:

mysql -h example.net -u myusername

从远程机器上,我可以毫无问题地连接到数据库并进行查询和其他修改。

更新:经过一些建议,我也尝试了这个,但没有改进:

<?php
    $usern = "myusername";
    $dbh = new PDO('mysql:host=servername.net;dbname=test', $usern, "");
    echo $usern;
?>

运行 PHP 的远程主机使用什么操作系统?也许 MySQL 在 php.ini 中没有启用。另外,请不要将mysql_*函数用于新代码。它们不再被维护,社区已经开始弃用过程(见红框)。相反,您应该了解预准备语句并使用PDO或MySQLi。如果您无法决定哪个,本文将为您提供帮助。如果您想学习,这是一个很好的PDO教程。

您是否尝试过使用 PDO 或 MySQLi 接口?如果你想学习PHP,无论如何都不应该使用mysql_*函数。查看是否可以使用类似于以下内容的行访问数据库:

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

如果您需要更详细的文档,此代码直接来自文档本身。

编辑:另外,尝试使用PDO的错误检查功能。此示例使用 PDO 创建数据库连接,并尝试执行简单查询。它不使用预准备语句或任何这些功能,因此它不是生产就绪的代码(即*不要在不了解如何改进它的情况下将其放入您的代码中),您需要对其进行编辑以包含与您的数据库相关的SELECT查询,但它至少应该告诉 PDO 提供有关它遇到的错误的更多信息。

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$dbhost     = "localhost";
$dbname     = "test";
$dbuser     = "root";
$dbpass     = "admin";
// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
// query
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM booksa";
$q = $conn->query($sql) or die("ERROR: " . implode(":", $conn->errorInfo()));
$r = $q->fetch(PDO::FETCH_ASSOC);
print_r($r);
?>

php 文件是否与 mysql 数据库位于同一服务器上,如果是这样,您可能必须使用 'localhost' 作为 mysql_connect() 的第一个参数而不是外部地址。