sql >> データベース >  >> RDS >> Mysql

名前の重複入力を防ぐことができないようです

    ここにはかなりの問題があります。

    MySQLキーワードlistを使用しています 関数として、それだけで問題が発生します。

    補足:はい、それは「予約語」ではなく、「キーワード」であり、MySQLは関数として使用される場合、キーワードを特別に扱います。これは、2番目のクエリで実行していることです。 、およびMySQLがそれを次のように解釈する方法です。テーブル宣言名ではなく関数。

    そのテーブルの名前をリストに変更するか、目盛りで囲むことをお勧めします。

    また、混合しないMySQLAPI/関数を混合しています。

    したがって、新しいコードは、
    $selected = mysql_connect('christmas', $dbhandle);を削除すると次のようになります。

    $query = mysqli_query($dbhandle, "SELECT * FROM `list` WHERE name='$name'") 
            or die (mysqli_error($dbhandle));
    
    if(mysqli_num_rows($query) > 0){
        echo 'that name already exists';
    }else{
        mysqli_query($dbhandle, "INSERT INTO `list` (name, one, two, three, four, five, six, seven, eight) 
                    VALUES ('$name' , '$one' , '$two' , '$three' , '$four' , '$five' , '$six', '$seven' , '$eight')") 
                     or die (mysqli_error($dbhandle));
    
    }
    
    
    mysqli_close($dbhandle);
    

    あなたのコードはSQLインジェクションにも開かれています。プリペアドステートメントを使用します。

    現在、すべての変数がどこから来ているのかわかりません。

    エラー報告を使用します。

    また、条件付きのempty()を使用することをお勧めします 変数/入力用。

    そうしないと、MySQLが文句を言う可能性のある他のエラーが発生する可能性もあります。

    つまり:

    if(!empty($var)){...}
    

    最終的に、データベースに重複するエントリがないことを確認するために、UNIQUE制約を設定できます。



    1. MySQLで新しいユーザーを作成して権限を付与する方法

    2. SQLServerでユーザー定義関数を暗号化する方法

    3. SQLServerのすべてのサーバートリガーのリストを返す

    4. MySQLネイティブドライバーとMySQLクライアントライブラリの違い