2017-09-16 1 views
1

내 페이지에 표시 할 데이터를 반복 한 다음 각 루프를 데이터베이스의 행에 삽입합니다 (PHP 및 MySQL의 개인 학습 연습).MySQL에서 for 루프의 마지막 항목을 데이터베이스에 삽입하지 않습니다.

루프는 5 회 실행됩니다 (예 : 반복 횟수가 많을 수도 있음). 처음 네 개의 루프에 대한 데이터를 성공적으로 삽입 할 수 있지만 마지막 루프가 ' 데이터베이스에 삽입하십시오.

모든 루프 반복이 내 페이지에 표시됩니다. 마지막 루프가 데이터베이스에 삽입되지 않는 이유는 확실하지 않습니다. 어떤 도움 깊이 감사하겠습니다

$artworksIterations = 1

count($artworksTitle[$x]) = 5

for ($x = 0; $x < $artworksIterations; $x++) { 
    for ($y = 0; $y < count($artworksTitle[$x]); $y++) { 
     $savedartworksTitle = $artworksTitle[$x][$y]; 
     echo "TITLE: " . $savedartworksTitle . "<br>"; 
     $savedartworksArtist = $artworksArtist[$x][$y]; 
     echo "ARTIST: " . $savedartworksArtist . "<br>"; 
     $savedartworksYear = $artworksYear[$x][$y]; 
     echo "YEAR: " . $savedartworksYear . "<br>"; 
     $savedartworksMedium = $artworksMedium[$x][$y]; 
     echo "MEDIUM: " . $savedartworksMedium . "<br>"; 
     $implodeGene = implode(", ", $artworksGene[$x][$y]); 
     echo "GENRES: " . $implodeGene; 
     $savedartworksDisplay = $artworksDisplay[$x][$y]; 
     echo "<br><img src='" . $savedartworksDisplay . "'><br>"; 
     echo "<br>----<br>"; 
     $sql = "INSERT INTO Artworks (title, artist, year, medium, display, genres) VALUES ('$savedartworksTitle', '$savedartworksArtist', '$savedartworksYear', '$savedartworksMedium', '$savedartworksDisplay', '$implodeGene');"; 
     mysqli_query($conn, $sql); 
    } // end of y 
} // end of x 

:

다음은 MySQL의 코드가 포함되어 내 for 루프입니다. 고마워요 :)

+0

는'에코 $의 sql'의 출력을 표시합니다. 또한 루프 후에 변경 내용을 커밋하십시오. –

+0

데이터 중복이 가능합니까? – user2182349

+0

'PRIMARY KEY '를 복제하면'INSERT INTO'가 실패합니다. 'Artwoks'테이블에 'PRIMARY KEY'가 있고 데이터가 고유하다는 것을 확인할 수 있습니까? –

답변

1

내 문제를 해부하는 데 도움을 주신 모든 분들께 감사드립니다!

단순한 우연으로 각 반복의 마지막 루프에있는 데이터에는 아포스트로피 (')가 포함되어 있는데, 이는 데이터베이스에 삽입되지 않은 이유입니다 (구문 오류).

오류를 확인해야한다는 점에 대해 Jacques에게 알려 주셔서 감사합니다. 구문 오류가있는 곳을 알려주는 곳입니다. (또한 아포스트로피 문제에 대해 알 수있는 jeff에게 감사드립니다.)

이 문제를 해결하기 위해 데이터베이스의 안전한 형식으로 데이터를 저장하는 mysqli_real_escape_string() 함수를 사용했습니다 (처음에는 학습 경험이 있어야 했겠지만!).

업데이트 작업 코드 :

for ($x = 0; $x < $artworksIterations; $x++) { 
    for ($y = 0; $y < count($artworksTitle[$x]); $y++) { 
     // display the information on the web page 
     echo "TITLE: " . $artworksTitle[$x][$y] . "<br>"; 
     echo "ARTIST: " . $artworksArtist[$x][$y] . "<br>"; 
     echo "YEAR: " . $artworksYear[$x][$y] . "<br>"; 
     echo "MEDIUM: " . $artworksMedium[$x][$y] . "<br>"; 
     echo "GENRES: " . implode(", ", $artworksGene[$x][$y]); 
     echo "<br><img src='" . $artworksDisplay[$x][$y] . "'><br>"; 

     // save data to MySQL safe format 
     $savedartworksTitle = mysqli_real_escape_string($conn, $artworksTitle[$x][$y]); 
     $savedartworksArtist = mysqli_real_escape_string($conn, $artworksArtist[$x][$y]); 
     $savedartworksYear = mysqli_real_escape_string($conn, $artworksYear[$x][$y]); 
     $savedartworksMedium = mysqli_real_escape_string($conn, $artworksMedium[$x][$y]); 
     $savedartworksDisplay = mysqli_real_escape_string($conn, $artworksDisplay[$x][$y]); 
     $implodeGene = mysqli_real_escape_string($conn, implode(", ", $artworksGene[$x][$y])); 

     // insert data into database 
     $sql = "INSERT INTO Artworks (title, artist, year, medium, display, genres) VALUES ('$savedartworksTitle', '$savedartworksArtist', '$savedartworksYear', '$savedartworksMedium', '$savedartworksDisplay', '$implodeGene');"; 
     if (mysqli_query($conn, $sql) === FALSE) { 
      printf("ERROR: %s\n", mysqli_error($conn)); 
     } 
     echo "<br>----<br>"; 
    } // end of y 
} // end of x 
+1

대신 매개 변수화 된 쿼리 사용 – Strawberry

관련 문제