为什么这个数据库连接速度这么慢?

时间:2012-08-24 20:12:06

标签: php mysql database

我的网站上有这个关于页面的链接列表,其中包含用不同类别点击的链接。这些链接显然会带您进入不同的子内容。 为什么这些链接有不同的类?因为我使用javascript和jquery,从数据库中获取一些内容并在没有重新加载的情况下在div中打击...数据库有3个字段:id,标题和内容。

javascript工作正常。它做它应该做的事情。它需要链接的类(这是数据库中的ID)并使用它来获取正确的内容..

基本上:

<?php
//take the post'ed variable you've been given.
if(isset($_POST['id']));

//for convenience use this variable insted
$id =  $_POST['id'];

//connect to the database
mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error());

//select database
mysql_select_db("ropox");
mysql_query("SET NAMES utf8");

//Grab this data    
$query = mysql_query("SELECT * FROM about WHERE id=$id");
while($row = mysql_fetch_array($query))
{

//echo it bask to the original page. This is printed on the original page
echo $row['content'];
}
?>

单击该链接时,在页面上显示内容之前需要1,03秒。起初它是2秒,但我设法削减它。我的所有其他数据库连接几乎立即发生,它们甚至通过循环回显大量内容。为什么这么慢?

2 个答案:

答案 0 :(得分:1)

向phpmyadmin写入sql:Explain SELECT * FROM about WHERE id=5

如果唠叨id没有索引,那么你有问题,很容易:)

如果你在约会表中有一个字段,最好使用field1,field2而不是*

这就是你可以做什么来加速从sql中选择,其他是设置和硬件,比如mysql服务器有1Mb可以自由运行你的服务器并且需要进行大量的交换或者你的处理器是Intel Pentium 1或者2类似的东西...因为你连接到localhost,而不是远程

答案 1 :(得分:1)

解决SQL注入问题:

  

我如何容易受到SQL注入攻击?用户没办法   输入自定义值。我知道他们可以改变ID,但有趣的是   那会吗?它会加载任何东西......

您直接从帖子中提取$id

$id =  $_POST['id'];

假设我们有一个智能攻击者,操纵帖子的数据并不困难。 @DanielA.White的SQL注入攻击类型警告你银行你没有确定$id是一个数字。因此,我们假设我将帖子中id的值设置为:

'3; DROP TABLE about;'

现在你遇到了麻烦 - 你引用的表已经消失了。有关详细信息,请参阅http://xkcd.com/327/。 ;)

清理您的输入实际上非常简单 - 只需查看此处:What's the best method for sanitizing user input with PHP?