我正在尝试使用以下代码将我的PHP代码安全地连接到MySQL:
<html>
<?php
$con = mysql_connect("localhost:3306","root","password");
if(!$con)
{
die('Could not connect: ' . mysql_error());
}
else
{
echo "Connection established!";
}
mysql_close($con);
?>
</html>
但我不断收到以下错误消息:
警告:mysql_connect()[function.mysql-connect]:无法连接到第5行的C:\ xampp \ htdocs \ database_connect.php中'localhost'(10061)上的MySQL服务器 无法连接:无法连接到'localhost'上的MySQL服务器(10061)
以下是我采取的故障排除步骤:
如何让这段代码安全地运行?我如何检查关于我的MySQL的基本有用信息,如用户名?
答案 0 :(得分:7)
您可以使用tcpview检查MySQL服务器是否绑定到端口3306。更简单地说,从主机说明符中删除端口。然后,驱动程序应尝试使用命名管道,而不是TCP套接字。
在一个不相关的说明中,我强烈建议您切换到PDO MySQL驱动程序。你正在使用的是非常过时的。 PDO支持prepared statements的一大优势是提供安全性和效率优势。
编辑:
这不能解答您的主要问题,但在评论中发布此信息将是一团糟。
而不是W3Schools,请查看以下建议的资源:
答案 1 :(得分:1)
也许您没有在MySQL安装上设置远程连接。您正尝试通过端口进行连接,该端口与远程连接相同。我做了MySQL已经有一段时间了,但这是一个死的赠品:
检查MySQL是否正在运行 通过键入Windows命令主机 提示:“telnet 192.0.0.1 3306”和 收到消息“无法打开 端口3306上与主机的连接: 连接失败“
它不会起作用。你确定它是为端口3306而不是另一个端口配置的吗?仔细检查一下。
代码本身看起来很好而且不是问题。港口显然是个问题。
答案 2 :(得分:1)
注意:这不是OP问题的解决方案,但我会因历史原因而保留我的答案,也因为这可能是其他人的问题。
您使用的是Windows Vista / 7并运行PHP 5.3.1吗?
最近PHP中MySQL库的更改(现在使用mysqlnd
)在连接到localhost
时会导致问题。已填写错误,但在此之前,请确保您的hosts
文件包含localhost
的条目。
您的hosts
个文件localhost
条目必须如下:
127.0.0.1 localhost
#::1 localhost
如您所见,IPv6
条目已注释掉,IPv4
条目未注明。
hosts
文件位于:
%WINDIR%\System32\drivers\etc\hosts
答案 3 :(得分:1)
您无法恢复密码,但可以创建一个新密码。关闭MySQL服务并执行:
cd c:\mypathtomysql\bin
mysqladmin -u root password NEWPASSWORD
答案 4 :(得分:1)
如果您可以访问MySQL shell,您可以检查服务器的网络配置,如下所示:
mysql> show variable like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
mysql> show variables like 'skip_networking';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| skip_networking | OFF |
+-----------------+-------+
1 row in set (0.00 sec)
如果'skip_networking'设置为'ON',那么您的MySQL服务器已配置为不允许通过网络访问,并且只能通过本地套接字运行。否则它将监听'port'配置变量中指定的端口。
答案 5 :(得分:1)
大家好,这是我第一次尝试使用Outis建议的使用PDO连接MySQL和PHP。有效。
<?php
$user = root;
$pass = password;
try
{
$dbh = new PDO('mysql:host = localhost; dbname=databaseName', $user,$pass);
if($dbh)
{
print "Connected successfully";
}
}
catch (PDOException $e)
{
print "Error: " . $e->getMessage(). "<br/>";
die();
}
?>
这是我的第二次尝试 - 这次我正在尝试进行查询
<?php
$user = root;
$pass = password;
try
{
$dbh = new PDO('mysql:host = localhost; dbname=databaseName', $user,$pass);
foreach($dbh->query('SELECT * FROM tableName') as $row)
{
print_r($row);
}
$dbh = null;
}
catch (PDOException $e)
{
print "Error: " . $e->getMessage(). "<br/>";
die();
}
?>
运行此代码后,我得到以下结果:
Array([exo_flowers_ID] =&gt; 1 [0] =&gt; 1 [name] =&gt; Dendroseris Neriifolia [1] =&gt; Dendroseris Neriifolia [country] =&gt; Chile [2] =&gt; Chile [ env_workers_id] =&gt; 1 [3] =&gt; 1)数组([exo_flowers_ID] =&gt; 2 [0] =&gt; 2 [name] =&gt; Snowdonia Hawkweed [1] =&gt; Snowdonia Hawkweed [country] = &gt;北威尔士[2] =&gt;北威尔士[env_workers_id] =&gt; 1 [3] =&gt; 1)
我想要的只是显示行或列的内容,而是获得所有内容以及所有这些括号。如何仅显示表格行或列的内容?
最后,我如何进行如下查询:SELECT * FROM tableName WHERE'columnName1'='somename'AND'columnName2'='someothername'; ?
答案 6 :(得分:0)
我解决了同样的问题&#34;无法在&#39; localhost&#39;&#34;上连接到MySQL服务器通过以下步骤(Windows 7,XAMPP v.3.2.1安装,php连接MySQL无法正常工作):
打开XAMPP控制面板(我的版本是v.3.2.1)。按下按钮&#34; Shell&#34;在小组的右侧。
窗口打开,标题为: &#34;管理员:XAMP for Windows - mysql -u root&#34;并附有以下文字:
Setting environment for using XAMPP for Windows comp@COMP c:\xampp
#mysql
获得答案:Welcome to the MySQL monitor…
然后输入:mysql>create database mdb;
答案:ERROR 1044 (42000): Access denied for user ‘’@’localhost’ to database ‘drawdb’
输入:#mysql –u root
答案:Welcome to the MySQL monitor…
输入:mysql>create database mdb;
答案:Query OK, 1 row affected (0.00 sec)
输入:mysql>grant all on mdb.* to user@localhost identified by ‘password’;
答案:Query OK, 0 rows affected (0.06 sec)
即。我允许手动创建的数据库访问指定的用户。之后,用户“user”和密码“password”的MySQL连接可以成功创建:
> $servername = "localhost";
> $username = "user";
> $password = "password";
> // Create connection
> $conn = new mysqli($servername, $username, $password);