我最近一直在改造我为我工作的公司建立的网站。因为我在一年多前开始这个项目,我的编码技能已经提高了很多,我想让网站加快速度。我对这个项目的主要关注点是安全性和速度。我一直在做的一件事就是改变我所有的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服务器
使用错误的编码技术是否可能导致此错误?或者它更有可能与我们的托管公司合作?
答案 0 :(得分:2)
您可以将登录名和密码存储在Web根目录之外,并将其包含在require_once()
中。
您可以使用mysql_pconnect()
来使用持久连接,以便将来的查询只使用开放连接而不是尝试重新连接。理想情况下,您希望尽可能使用缓存层消除这些连接,以便USER只能访问缓存,并且缓存写入器只能访问数据库。然后设置一个cron或事件驱动系统,以合理的间隔更新缓存,以根据应用程序的需要控制负载。
答案 1 :(得分:1)
很多人都会像这样存储他们的数据库连接,并根据需要存储require
。您可以使用RedBean或Doctrine之类的ORM层来抽象连接,因此您的代码中没有直接的sql。
约mysql_close()
这里是manual所说的内容:
正如Joel所提到的,你绝对不应该在面向Web的应用程序上执行root执行查询,使用户只具有访问db所需的权限。在任何地方打开root访问只是要求被黑客攻击。mysql_close()关闭与MySQL服务器的非持久连接 与指定的链接标识符相关联。
通常不需要使用mysql_close(),因为非持久性打开 链接在脚本执行结束时自动关闭。
答案 2 :(得分:0)
你可能应该拥有root用户名和密码,这样人们就无法通过互联网访问这些文件,但PHP仍然可以像在本地机器上一样。这样可以避免弄乱PHP配置,使您的密码可访问。
答案 3 :(得分:-3)
这是一种安全的方法吗?
是
警告:mysql_connect()[function.mysql-connect]:无法连接MySQL服务器
这是数据库服务器的问题,而不是您的应用程序