PHP mysqli->连接到远程主机插入本地主机名与用户名


PHP mysqli->connect to remote host inserts local hostname with username

这段代码在我的Mac上运行,但不是在托管服务器上运行。错误信息是:

Tue, 11 Jun 2013 14:46:48 -0700
Remote host: my_remoteserver.com
Remote user: my_user
Remote db: my_remotedbname
mysqli Failed to connect to MySQL: Access denied for user 'my_user'@'localsystem.com' (using password: YES)

由于某些原因,本地apache/php系统将"@localsystem.com"附加到我的userid。我可以调整什么配置参数来防止这种情况?

当从我的Mac上运行时,输出如下所示:

Tue, 11 Jun 2013 18:03:41 -0400
mysqli Connection was OK!
Show databases returned 2 rows.
information_schema ()
my_remotedatabase ()

代码:

<?php
$hostname = "my_remoteserver.us";
$user = "my_user";
$password = "_today0613";
$dbname   = "my_remotedbname";
echo date(r, time());
echo "Remote host: " . $hostname . "<br/>";
echo "Remote user: " . $username . "<br/>";
echo "Remote db: " . $dbname . "<br/>";

$con=mysqli_connect($hostname,$user,$password,$dbname);
// Check connection
if (mysqli_connect_errno($con))
  {
  echo "mysqli Failed to connect to MySQL: " . mysqli_connect_error();
  } else { echo "mysqli Connection was OK!<br />'n";}
/* Select queries return a resultset */
if ($result = $con->query("SHOW databases")) {
    printf("Show databases returned %d rows.<br />'n", $result->num_rows);
    /* fetch object array */
    while ($row = $result->fetch_row()) {
        printf ("%s (%s)<br />'n", $row[0], $row[1]);
    }
    /* free result set */
    $result->close();
    }
$con->close();
?>

您是否为用户启用了远程访问?如果没有,以root或其他管理员身份登录mysql并发出:

GRANT ALL PRIVILEGES ON *.* TO  ‘USERNAME’@‘IP’  IDENTIFIED  BY  ‘PASSWORD’;

改变:

*.*代表所有模式,所有表。对一个模式的特定访问(推荐):

SchemaName.*

username到想要访问的用户

ip更改为服务器所在的IP

identified by passwordpassword代替用户密码。

Then issue:

FLUSH PRIVILEGES

或重新启动整个mysql服务

好吧,这是一个问题。可能是原因。

$con=mysqli_connect($hostname,$user,$password,$dbname);

在调试时使用。

echo "Remote user: " . $username . "<br/>";

必须是同一个变量。如果没有填充,系统默认可能会使用@localsystem.com。