2012-03-30 7 views
1

データベースに値を挿入しようとしていますが、データベースを開くときに値がテーブルに挿入されません。今度はすべてのコードが間違っていないかどうかという点で正しいですが、なぜDBテーブルに値を挿入しないのですか?データベースに値を挿入していません

このフィールドはプライマリキーフィールドではなく、プライマリキーフィールドが非プライマリキーフィールドであることをテストしています。プライマリキー値が非プライマリキーフィールドでない場合、dbテーブルに値を挿入しません。挿入された?以下は

はコードです:

<?php 
    session_start(); 

    $username="xxx"; 
    $password="xxx"; 
    $database="mobile_app"; 

    mysql_connect('localhost',$username,$password); 

    @mysql_select_db($database) or die("Unable to select database"); 


    $sql="INSERT INTO Session (Course) 
    VALUES 
    ('$_POST[course]')"; 

    mysql_close(); 

    if (isset($_POST['course'])) { 

    $_SESSION['course'] = $_POST['course']; 

    } 

    ?> 
+3

**警告**あなたのコードはSQLインジェクション攻撃に対して脆弱です。 –

+6

クエリを実行することは決してありません。それを保持する変数を定義するだけです。 @DanielA。 – jprofitt

+3

白は脆弱ですか?それはそれを実行していない:) –

答えて

1

あなたはそこに主キーを追加する必要があります。主キーが自動生成されない限り(ID)、主キーを指定せずにデータベースに行を追加することはできません。

編集:Damienが指摘したように、$ sql変数を定義した後で次の行を追加する必要があります。

mysql_query($sql) 
+3

ええと、mysql_query()多分? –

+0

Damienが正しいです、私は完全にmysqlクエリを使用することを忘れました。私はそんなにばかです。ありがとう:) – user1394925

+0

ええ、素晴らしいスポットダミアン私はあなたのために私の編集にそれを追加しました:)を参照してくださいされません – mattytommo

1

あなたの質問に対する回答はNOです。このようにデータベースに値を挿入することはできません(プライマリキーの値を挿入しないでください)

+0

彼はPKを必要としませんafaik(そしてそれは単なるAIかもしれません)。ちょうど彼はそれをやっていない。 –

+0

しかし、DbにPKがある場合は、自動生成されない限りその値を挿入する必要があります。 –

1

SQLクエリをどこかで実行してはいけませんか?現時点では、SQLクエリを変数に代入するだけです。それは決して実行されません。

(また、ボビーのテーブルのためのGoogle検索を行う...)

1

あなたが "するmysql_query" の文が欠落していますか?

mysql_query($sql); 

クエリを書き込む方法を変更する必要があります。攻撃のためにOPENです!

+0

これは注射に脆弱です。 –

+0

@DamienPirsy:そうです。私は私の答えでそれを言及し、ダニエル – Shyju

+0

IMHOによって、この質問の最初のコメントupvoted IMDO、これはコード "ですが、このようにしないでください"と言うのではなく、答えを訂正する方が良いでしょう:) –

1
たが、これにコードのあなたの特定のセグメントを変更し

<?php 
    session_start(); 
    $username="xxx"; 
    $password="xxx"; 
    $database="mobile_app"; 
    mysql_connect('localhost',$username,$password); 
    @mysql_select_db($database) or die("Unable to select database"); 
    if (isset($_POST['course'])) { 
    $_SESSION['course'] = $_POST['course']; 
    $sql="INSERT INTO Session (Course) VALUES (' ". mysql_real_escape_string($_POST['course']) . "');"; 
    } 
    mysql_query($sql); 
    mysql_close(); 
?> 
1

まあ..あなたが実際にそれがINSERT声明を有効にするために、クエリを実行する必要があります。

一般的なコードについては、古代のチュートリアルから学んだに違いありません。 mysql_*関数は10年以上経過しており、もはや維持されていません。 mysql_*関数で新しいコードを書くべきではありません。 PHPコミュニティはすでにmake them deprecatedに移動しています。代わりにPDOまたはMySQLiを使用する必要があります。

およびエラー抑制演算子@を乱用するのをやめてください。それは遅く、ほとんどの場合有害であると考えられています。あなたは、MySQLとPDOを使用する方法を学びたいのであれば

// connect to database 
$connection = new PDO('mysql:host=localhost;dbname=mobile_app;charset=UTF-8', 
         'username', 'password'); 
$connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

// set up the query 
$query = 'INSERT INTO Session (Course) VALUES(:course)'; 
$statement = $connection->prepare($query); 
$statement->bindParam(':course', $_POST['course'], PDO::PARAM_STR, 63); 
// last parameter is max length of field in the table 

// perform the query 
if ($statement->execute()) 
{ 
    // everything worked 
} 

代わりにヨーヨーのような何かを書く必要がありますthis tutorialが役立ちます。 MySQLi APIがより良い選択であると考えるなら、あなた自身でいくつかを見つけなければなりません。

関連する問題