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有什么区别