2017-01-25 5 views
1

ユーザーIDと日付のあるテーブルがあり、複数のユーザーが同時に接続し、1日に1人のユーザーしかデータベースに挿入できません。SQL接続が遅い、敬意を表しますselect

日付が変わることがあるため、時にはそれがプライマリキーになることはできないため、今日の状況であろうとなかろうと、サーバーへの接続が遅く、最後の項目の選択には何が必要ですか同じ日の二重登録。

これが起こらないようにするにはどうすればよいですか?1日だけ挿入を保証しますか?あなたは、同じグループ内の重複日付がないことを確認することができますその方法によって、キーとして(date, id_group)を使用して一意のインデックスを作成することができます

<?php 
$sql = "SELECT MAX(timestamp_pole) as last_pole FROM pole WHERE id_group = ". $id_grup; 
$resultado = $mysqli->query($sql); 
$resultado = $resultado->fetch_assoc(); 
$las_00 = date('Y-m-d'); 
$las_00 = strtotime($las_00); 
if ($resultado['last_pole'] >= $las_00){ 
} else { 
    $sql = "INSERT INTO pole (timestamp_pole, id_user, id_group) VALUES (". $timestamp .",". $user['id'] .",". $id_group .")"; 
    $mysqli->query($sql); 
    //return addslashes($sql); 
    if (isset($user['username'])) 
     return "@". $user['username'] ." pole!"; 
    else 
     return $user['name'] ." pole!"; 
} 
?> 
+2

**警告**:mysqliを使用する場合、[パラメータ化されたクエリ](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)と['bind_param' ](http://php.net/manual/en/mysqli-stmt.bind-param.php)を使用してユーザーデータをクエリに追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'や' $ _GET'データを直接クエリに入れないでください。誰かがあなたのミスを悪用しようとすると、非常に危険です。 – tadman

+0

ありがとうございます。 – Cookie

答えて

0

はあなたに

コードをありがとうございました。また、try/catchを挿入クエリを実行するように実装することを忘れないでください。

+0

私はタイムスタンプフィールドを持っているため、誰かが00:01にエントリし、00:02に別の値を持っているので、それはできません – Cookie

関連する問題