2012-04-04 9 views
1

내가 여기에이 오류가 나는 ''에 % d 개를 작성하려고했지만 여전히 작동하지 않은 내 코드오류 : 열 수가 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>'; 
    } 

    ?> 

입니다 오전 값의 수를 일치하지 않습니다.

+0

테이블 구조는 무엇입니까? 열 집합을 지정하지 않으면 모든 열에 값을 제공해야합니다. – Interrobang

+0

@Interrobang 죄송합니다. 열 집합이 무엇인지 이해하지 못했습니다. 내 테이블 구조를 보여 주려고합니다. –

+0

죄송합니다. 삽입하려는 열을 지정하지 않으면 (INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)') 그런 다음 * all * columns에 대한 값을 지정해야합니다. – 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

처럼 채우려는 열을 명명 시도 쓸모있는 기본값 : 당신이 auto_increment ID 열이 분을 특히 이후

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

akes 감; 그렇지 않으면 쿼리에 항상 NULL으로 지정해야합니다.

가장 쉬운 (뿐만 아니라 추한) 수정하여 다음과 같습니다

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

좋은 수정이 될 것이다 : 그런데

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

을 PDO를 사용하는 것을 고려 - 당신은 무언가를 사용할 수 있습니다 형식 문자열과 유사하지만 이스케이프 처리가 필요하지 않습니다.

+0

잘못되었습니다. "VALUE는 VALUES의 동의어이며, 값 목록의 수를 의미하지 않으며 하나의 값 목록 또는 여러 목록이 있는지 여부에 관계없이 사용할 수 있습니다." http://dev.mysql.com/doc/refman/5.5/en/insert.html – Interrobang

+0

@Interrobang : 업데이트되었습니다. – ThiefMaster

+0

열 이름을 지정하지 않고 값을 값으로 변경하면 여전히 작동하지 않습니다. –

관련 문제