PHP:mysql_connect 不返回 FALSE

Posted

技术标签:

【中文标题】PHP:mysql_connect 不返回 FALSE【英文标题】:PHP: mysql_connect not returning FALSE 【发布时间】:2011-11-10 20:40:53 【问题描述】:

我有一个表单,用户可以在其中输入他们的数据库信息,然后可以单击使用 AJAX 的链接将凭据发送到此页面。我遇到的问题是,只要他们输入正确的主机名,脚本就会返回TRUE

如果用户名和密码无效,是否有另一种方法来测试它以返回FALSE

$h  =   urldecode($_GET['h']);
$u  =   urldecode($_GET['u']);
$p  =   urldecode($_GET['p']);

$con = mysql_connect($h, $u, $p);

if(!$con)
    echo 'Could not connect';


else
    echo 'Connected';

解决了!

为了将来参考,问题在于 mysql 用户表中 user = "Any" 的条目在哪里。我删除了这些用户,脚本按预期工作。我更新了这篇文章,为遇到类似问题的人提供了一个屏幕截图。感谢 Fabio below 的建议!

【问题讨论】:

不应该这样做。手册绝对清楚,如果连接失败,将返回false。也许您尝试使用的 SQL 服务器被错误配置为接受任何连接?您是否尝试过使用另一个 mySQL 服务器? 我现在正在使用 localhost (WAMP) 所以没有。请稍等,我将在远程服务器上尝试。 好的,现在不能连接到远程服务器。尽管输入随机密码会给我“无法连接”消息,但我已将问题缩小到用户名。这意味着它接受任何没有附加密码的用户名。 【参考方案1】:

这是因为mysql_connect在连接时使用了一些默认值,如果我没记错的话,用户名应该是root,密码应该是空白字符串。或者可以是运行网络服务器的用户名。

这可能意味着您的数据库服务器接受无密码根连接(来自网络服务器机器),这是非常危险的。您应该检查您的数据库配置和用户列表。

从安全的角度来看,您的代码不是很安全,数据库凭据以明文形式传输,根据经验,最终用户不应输入数据库凭据(除非您正在编写类似 phpMyAdmin 的工具)。

【讨论】:

你应该补充一下,你的脚本是否运行为? 我现在使用的是 localhost (WAMP),所以我不太担心没有密码的 root 连接。此外,mysql_connect 使用默认值这一事实并不重要,因为它为 any 用户名返回TRUE,而不仅仅是空白用户名。哦,这是从脚本的安装程序中获取的,所以我必须要求提供数据库凭据。我认为出于同样的原因以纯文本形式提交它们不是问题。 那应该是别的了,你有没有试过记录$h,$u$p变量?尝试使用非 ajax 调用(例如 http://hostname/script.php?h=somehost&u=foo&p=bar)并在 mysql_connect 调用之前转储值。 好的,我尝试了一个非 AJAX 调用并转储了值,并且没有任何意外。这些值是我在表单中输入的(没有丢失)。 这很奇怪。你应该检查你的 MySQL 配置,尤其是你的 users 表。由于这是本地安装,我认为您可以使用 mysql 数据库的用户表的内容安全地更新您的问题。并尝试使用command line client 输入类似mysql -u abcdef -h localhost -p

以上是关于PHP:mysql_connect 不返回 FALSE的主要内容,如果未能解决你的问题,请参考以下文章

mysql_connect 不工作如何用 mysql 修复 [重复]

php中@mysql_connect与mysql_connect有什么区别

php中@mysql_connect与mysql_connect有什么区别

PHP连接mysql时mysql_connect()函数不可用,报500错误

PHP调用未定义函数mysql_connect

php7已经放弃mysql_connect() 支持,php5.5可以,是废弃函数