0

私のサイトには、さまざまなクラスでクリックするリンクのリストを含むこのページがあります。これらのリンクは、明らかに別のサブコンテンツに移動します。これらのリンクのクラスが異なるのはなぜですか? 私はjavascriptとjqueryを使用しているため、データベースからコンテンツを取得し、リロードせずにdivで叩きます...データベースには、id、headline、contentの3つのフィールドがあります。

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

phpmyadmin に sql を書き込みます。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 に答える