2012-08-24 101 views
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

** **警告你的代碼可能會受到SQL注入攻擊! –

+1

是'id'一個索引列嗎? 「約」桌有多大?此外,您的代碼容易受到SQL注入攻擊 – Cfreak

+0

代碼中沒有任何內容似乎很慢,但也許可以查看「AJAX」請求以查看最長的時間。你可以看看'Net'面板下的請求。 – Grampa

回答

1

寫入到phpMyAdmin的SQL:Explain SELECT * FROM about WHERE id=5

如果嘮叨ID沒有被索引,如果您有關於在表中的字段的loooot比你有問題,容易:)

更好,使用field1,field2而不是*

這就是你可以做的所有加速選擇從sql,其他設置和硬件,如MySQL服務器有1Mb自由運行你的服務器,並需要做大量的交換或者你的處理器是英特爾奔騰1或2類似的東西...因爲你連接到本地主機,而不是遠程

+0

好的!乾杯。它沒有帶來任何錯誤。該表僅包含3個字段,所以不應該成爲問題,而且我也沒有處理任何如此之大的硬件問題。而沒有一個專家我敢肯定的說... 想我得忍受它... – TehHO

+0

它可以被廉價的PHP主機上的超跌網站太:你得到更少的CPU時間 – 2012-08-24 20:30:13

1

解決SQL注入方面:

我怎樣才能容易受到SQL注入?用戶 無法輸入自定義值。我知道他們可以改變身份證,但那會是多麼有趣的事情?它會然後加載任何東西...

您直接從帖子拉$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?

相關問題