2016-05-05 5 views
0

私は2つのテーブルを持つ予約システムを持っています。ユーザーが予約したかどうかをユーザーが知るようにユーザー(ユーザーと呼ばれる)の1つのテーブルと、そのクラスにどのユーザーがサインアップしているかを教師が知るように、教師用の別のテーブル(予約と呼ばれる)。以下は、ユーザーがクラスのブックを解除したときの例です。2つのクエリまたはPHPを使用してmysqliで1?

$new_classes_booked=$classes_booked-1; 
$sql2 = $con->query("UPDATE users SET $classes_booked='{$new_classes_booked}' where userID='{$User}'"); 

$sql2 = $con->query("DELETE FROM bookings where user='{$user}' AND id_class='{$id_classs}'"); 

このシステムは、多くのユーザーと教師が同時に使用します。それを考えると、これを実行するためのより効率的で安全な方法がありますか?

+0

[Little Bobby](http://bobby-tables.com/)は[あなたのスクリプトはSQLインジェクション攻撃の危険にさらされています。](http://stackoverflow.com/questions/60174/how-can-i) -prevent-sql-injection-in-php)を実行します。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –

+0

[PDO](http://php.net/manual/en/pdo.prepared-statements.php)と[MySQLi(英語)]の[prepared](http://en.wikipedia.org/wiki/Prepared_statement) ](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)、PDOの使用を検討してください。[とても簡単です](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+1

'このシステムは多くのユーザーと教師によって同時に使用されます'秒ごとに何千ものリクエストがありますか? 1000 /秒未満の場合は、この段階での早期の最適化よりもクエリのセキュリティについての心配があります –

答えて

0

2つのクエリを1つずつ実行することをお勧めします。第二のものは非常に速く実行されるため、何の違いもありません。どのようにあなたは一見を見ることができるmysqli_multi_query()機能。

0

もっと効率的な方法がありますか?

はい。
正直なところ、テーブル構造はひどく、データベース設計のあらゆるルールに違反しています。

usersテーブルに$ classes_bookedのようなものはありません。予約クラスの数は、予約テーブルから取得する必要があります。

これを実行するより効率的で安全な方法はありますか?

はい。
準備済みの文を使用してください。

$sql = "DELETE FROM bookings where user=? AND id_class=?"; 
$con->query($sql)->execute([$user,$id_class]); 

2クエリまたはmysqliの中に1 PHPを使用して:私のmysqliのチュートリアルとして

は、ここではPDOベースのセキュリティで保護されたクエリ、まだ準備ができていないのですか?

があります。 PHPで2つ以上のクエリを実行しても問題ありません。典型的なアプリケーションでは、ヒットごとに数十のSQLクエリが実行され、完全に健全だと感じています。

ループ内でクエリを実行していない限り、タスクに適したクエリをいくつでも使用します。

+0

ありがとうございました!私は興味があり、SQLとPHPのセキュリティに新しいです。このPDOベースのセキュリティで保護されたクエリが私の最初のクエリ作成方法よりも安全である理由をこの例で説明する簡単な方法はありますか? – user5095266

関連する問題