0

我的网站有这个关于页面的链接列表,可以点击不同的类。这些链接显然会将您带到不同的子内容。为什么这些链接有不同的类?因为我使用 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 秒,但我设法减少了它。我所有的其他数据库连接几乎立即发生,它们甚至通过循环回显大量内容。为什么这么慢?

4

2 回答 2

1

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

如果 id 没有被索引,那么你就有问题了,简单:)

如果您在 about 表中有大量字段,最好使用 field1,field2 而不是 *

这就是加快从 sql 中选择的所有操作,其他是设置和硬件,例如 mysql 服务器有 1Mb 空闲空间来运行您的服务器并且需要进行大量交换,或者您的处理器是 Intel Pentium 1 或 2 之类的那...因为您连接到本地主机,而不是远程

于 2012-08-24T20:20:05.483 回答
1

解决 SQL 注入方面的问题:

我如何容易受到 SQL 注入的攻击?用户无法输入自定义值。我知道他们可以更改 ID,但那会有什么乐趣呢?然后它什么都不会加载...

你是$id直接从帖子中拉出来的。

$id =  $_POST['id'];

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

'3; DROP TABLE about;'

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

清理您的输入实际上非常简单 - 只需看这里:使用 PHP 清理用户输入的最佳方法是什么?

于 2012-08-24T21:07:45.913 回答