2012-04-04 4 views
1

で値の数と一致していない私はここに、このエラーを取得していますが、私のコードエラー:列数が行1

if(isset($_POST['submit'])) 
    { 
    $projTit=mysql_escape_string($_POST['projecttitle']); 
    $projCat=mysql_escape_string($_POST['projectcategory']); 
    $budget=intval(mysql_escape_string($_POST['budget'])); 
    $description=mysql_escape_string($_POST['editor1']); 
    $query=sprintf("insert into projects value('%s','%s','%s',%d)", 
      $projTit,$description,$projCat,$budget); 
    if (!mysql_query($query)){ 
     die('Error: ' . mysql_error()); 
     } 
     echo '<p class="record">Your Record has been Added<p>'; 
    } 

    ?> 

である私は''中%dを書き込もうとしましたが、まだ働いていません。

+0

あなたのテーブル構造は何ですか?列セットを指定しない場合は、すべての列に値を指定する必要があります。 – Interrobang

+0

@Interrobang申し訳ありませんが、列の設定がわかりませんでした。テーブルの構造を表示させてください。 –

+0

INSERT INTOテーブル(col1、col2など)の構文を使用して、すべての列の値を指定する必要があります。 – Interrobang

答えて

4

テーブルには5つの列があります。ただし、Project_Id列の値を指定していません。これは、あなたが言及したエラーを提供します。

自動インクリメントする可能性が高いPRIMARY KEYなので、値を入力していないと私は理解しています。 MySQLに意図的にその列の値を渡さないようにするには、を最初の値としてNULLに追加する必要があります。

value(NULL, '%s','%s','%s',%d) 

しかし、あなたは本当に、特にあなたが将来の日付で新しい列を追加する場合にに挿入された列の名前必要があります。

INSERT INTO projects (col1, col2, col3, col4) value ('%s','%s','%s',%d) 
+0

働いていただきありがとうございます。 –

1

それが持っている場合でも、あなたはあなたが本当には、カラム名を指定する必要がありますか、後で列を追加する場合は、あなたのアプリが解除されます

insert into projects (col1, col2, col3) values (...) 
+0

はい列に名前を付ける私は値を付け加えることができました。 –

2

のように記入する列を命名してみてください使用可能なデフォルト値:

INSERT INTO projects 
    (Project_Title, Project_Description, Project_Category, Project_Budget) 
VALUES 
    (...) 

特にauto_increment ID列があるのでアクセルセンス。それ以外の場合は、クエリに常にNULLと指定する必要があります。

最も簡単な(だけでなく、醜い)の修正は、このように次のようになります。

$query=sprintf("insert into projects value (null, '%s','%s','%s',%d)", 
     $projTit,$description,$projCat,$budget); 

良い修正はこのようになります:PDOを使用することを検討して、ところで

$query = sprintf(" 
    INSERT INTO projects 
     (Project_Title, Project_Description, Project_Category, Project_Budget) 
    VALUES 
     ('%s', '%s', '%s', %d) 
    ", $projTit,$description,$projCat,$budget); 

- そして、あなたが何かを使用することができます書式文字列に似ていますが、エスケープ処理は必要ありません。

+0

間違っています。 VALUEはこの文脈ではVALUESの同義語であり、値リストの数については何も意味しておらず、単一の値リストでも複数のリストでもどちらでも使用できます。 http://dev.mysql.com/doc/refman/5.5/en/insert.html – Interrobang

+0

@Interrobang:更新されました。 – ThiefMaster

+0

列名を指定せずに値を値に変更してもまだ動作していません。 –

関連する問題