优化PHP连接

时间:2012-03-01 17:42:38

标签: php mysql database-connection

我最近一直在改造我为我工作的公司建立的网站。因为我在一年多前开始这个项目,我的编码技能已经提高了很多,我想让网站加快速度。我对这个项目的主要关注点是安全性和速度。我一直在做的一件事就是改变我所有的PHP连接,以确保它们安全快速。这是我从数据库中提取内容时通常遵循的格式:

<?php

    //Connect to MySQL
    require_once('includes/config.php');

    $link = mysql_connect($host, $user, $pass);
    if(!$link) {
        die('Server connection failed. Please refresh the window. If this problem persits, please send an e-mail to <me>');
    }
    $db = mysql_select_db($database);
    if(!$db) {
        die("Unable to select database");
    }

    $qry="SELECT * FROM <table> WHERE Category='<parameter>' ORDER BY substr(`P/N`,1,4) ASC";
    $result=mysql_query($qry);

while($row = mysql_fetch_array($result))
    {
    echo "
    //Output code
";
    }
?>

首先,存储连接变量的最佳方法是什么,比如MySQL用户名/密码?在上面的代码中,我使用的是包含所有服务器变量的require_once('includes/config.php')。这是一种安全的方式吗?或者有更好的方法吗?

其次,我应该更好地管理记忆吗?我正在阅读关于mysql_close()的关于本网站的PHP文档和问题,我得出结论我并不需要它。但是,最近我得到了相当数量的连接失败。

  

警告:mysql_connect()[function.mysql-connect]:无法连接MySQL服务器

使用错误的编码技术是否可能导致此错误?或者它更有可能与我们的托管公司合作?

4 个答案:

答案 0 :(得分:2)

您可以将登录名和密码存储在Web根目录之外,并将其包含在require_once()中。

您可以使用mysql_pconnect()来使用持久连接,以便将来的查询只使用开放连接而不是尝试重新连接。理想情况下,您希望尽可能使用缓存层消除这些连接,以便USER只能访问缓存,并且缓存写入器只能访问数据库。然后设置一个cron或事件驱动系统,以合理的间隔更新缓存,以根据应用程序的需要控制负载。

答案 1 :(得分:1)

很多人都会像这样存储他们的数据库连接,并根据需要存储require。您可以使用RedBeanDoctrine之类的ORM层来抽象连接,因此您的代码中没有直接的sql。

mysql_close()这里是manual所说的内容:

  

mysql_close()关闭与MySQL服务器的非持久连接   与指定的链接标识符相关联。

     

通常不需要使用mysql_close(),因为非持久性打开   链接在脚本执行结束时自动关闭。

正如Joel所提到的,你绝对不应该在面向Web的应用程序上执行root执行查询,使用户只具有访问db所需的权限。在任何地方打开root访问只是要求被黑客攻击。

答案 2 :(得分:0)

你可能应该拥有root用户名和密码,这样人们就无法通过互联网访问这些文件,但PHP仍然可以像在本地机器上一样。这样可以避免弄乱PHP配置,使您的密码可访问。

答案 3 :(得分:-3)

  

这是一种安全的方法吗?

  

警告:mysql_connect()[function.mysql-connect]:无法连接MySQL服务器

这是数据库服务器的问题,而不是您的应用程序