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

PHPフォームがmySQLデータベースに挿入されない

    他の人はすでにあなたに答えを与えています。追加するには、列名を引用符で囲むか、引用符を完全に削除する必要があります。

    変更:

    INSERT INTO orders ('name', 'tacoOrder')
                        ^    ^  ^         ^
    

    INSERT INTO orders (`name`, `tacoOrder`)
    

    または

    INSERT INTO orders (name, tacoOrder)
    

    または完全な答えとして:

    $name = $_POST['name'];
    $tacoOrder = $_POST['tacoOrder'];
    
    $query = "INSERT INTO orders (`name`, `tacoOrder`) VALUES ('$name', '$tacoOrder')";
    

    補足:バッククォートは必須ではありませんが、列名に一重引用符は使用できません。私自身が列名の周りにバッククォートを使用するのは、単なる習慣の力です。

    さらに、この $ mysql_close(); $があってはなりません mysql_closeの前 しかし、 $ link 角かっこ内:

    mysql_close($ link);に変更します

    しかし、エイリアン氏が指摘したように、 mysql_close()の変数 オプションです(ありがとうございます)

    もありません if(!mysql_query($ query) if(!mysql_query($ query))と読み替えてください。

    mysqli _ *への切り替えを検討してください プリペアドステートメントまたはPDOを使用する関数。 mysql _ * 関数は廃止され、将来のリリースから削除されます。

    完全な書き直し:(テスト済み と私のサーバーで作業しています)

    <?php
    
    define('DB_NAME', 'tacoPractice');
    define('DB_USER', 'root');
    define('DB_PASS', 'root');
    define('DB_HOST', 'localhost');
    
    $link = mysql_connect(DB_HOST, DB_USER, DB_PASS);
    
    if(!$link)
    {
        die('Could not connect to database: ' . mysql_error());
    }
    
    $db_select = mysql_select_db(DB_NAME);
    
    if(!$db_select)
    {
        die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
    }
    
    echo "HOLY EFF";
    $name = $_POST['name'];
    $tacoOrder = $_POST['tacoOrder'];
    
    $query = "INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')";
    if(!mysql_query($query))
    {
        die("DAMMIT");
    }
    else{ echo "Success"; }
    
    mysql_close();
    
    ?>
    

    少し異なるこの方法を使用することもできます:

    $query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')");
    if (!$query) {
        die('Invalid query: ' . mysql_error());
    }
    else{ echo "Success"; }
    

    脚注:

    フォーム要素が空のままかどうかをチェックしていないため、空のデータエントリを取得するリスクがあります。

    次のような条件文を使用できます:

    if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))
    {
    // continue with code processing
    }
    

    さらに、Awladが彼の答えで言及しているものを使用してください mysql_real_escape_string()の使用に関して

    SO PHPでSQLインジェクションを防ぐにはどうすればよいですか?

    これが(基本的な) mysqli _ *です mysqli_real_escape_string()を使用したベースのメソッド 関数と、フィールドのいずれかが空かどうかを確認するための条件ステートメント。

    フィールドの1つを空のままにすると、クエリは実行されません。

    <?php
    define('DB_NAME', 'tacoPractice');
    define('DB_USER', 'root');
    define('DB_PASS', 'root');
    define('DB_HOST', 'localhost');
    
    $link = mysqli_connect(DB_HOST, DB_USER, DB_PASS);
    
    if(!$link)
    {
        die('Could not connect to database: ' . mysqli_error());
    }
    
    $db_select = mysqli_select_db($link,DB_NAME);
    
    if(!$db_select)
    {
        die('Can\'t use ' . DB_NAME . ': ' . mysqli_error());
    }
    
    echo "HOLY EFF";
    $name = mysqli_real_escape_string($link,$_POST['name']);
    $tacoOrder = mysqli_real_escape_string($link,$_POST['tacoOrder']);
    
    
    if(!empty($_POST['name']) || !empty($_POST['tacoOrder'])){
    $query = "INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')";
    if(!mysqli_query($link,$query))
    {
        die("DAMMIT");
    }
    else{ echo "Success"; }
    
    mysqli_close($link);
    
    }
    
    ?>
    


    1. PAUGデータベースデザイナカンファレンスに参加してください

    2. ALTERTABLEステートメントがSQLServerのCHECK制約と競合していました-SQLServer/TSQLチュートリアルパート89

    3. RubyonRailsのストアドプロシージャ

    4. JSONサブコンポーネントを抽出するための演算子