0

I know I am doing this completely wrong, but current I have:

$genre0 = addslashes(strip_tags($movieInfo[genres][0][name]));
$genreid0 = addslashes(strip_tags($movieInfo[genres][0][id]));
...
$genre4 = addslashes(strip_tags($movieInfo[genres][4][name]));
$genreid4 = addslashes(strip_tags($movieInfo[genres][4][id]));

Then

mysql_query($query = "INSERT INTO tblMovies (movie_id, genre_id, genre_name) VALUES ($movie_id , $genreid0, $genre0");
...
mysql_query($query = "INSERT INTO tblMovies (movie_id, genre_id, genre_name) VALUES ($movie_id , $genreid4, $genre4");

I know this is extremely repetitive, but it is the only way I can figure out that works. I have tried a ton of for each statements to no avail. I have tried following this one insert multiple rows via a php array into mysql and a few others, but cannot seem to figure it out.

This is embedded in a SELECT/WHILE statement that runs through a list of movies...

Any tips or suggestions would be greatly appreciated!

Thanks!

1
  • Switch to PDO. Prepare a statement INSERT INTO tblMovies (...) VALUES (:movie_id, :genre_id, :genre_name). Execute this statement in a loop, once for each genre you have. Commented Dec 29, 2012 at 6:57

3 Answers 3

1

You can use prepared statements for handy execution of your query:

      $stmt = $dbh->prepare("INSERT INTO tblMovies (movie_id, genre_id, genre_name)
                             VALUES (:movie_id , :genreid, :genre")");

      $stmt->bindParam(':movie_id ', $movie_id);
      $stmt->bindParam(':genreid', $genreid);
      $stmt->bindParam(':genre', $genre);

      for($i=0; $i < count($movieInfo['genres']); $i++){
         $movie_id = i;
         $genreid = addslashes(strip_tags($movieInfo['genres'][i]['id']));
         $genre = addslashes(strip_tags($movieInfo['genres'][i]['name']));
         $stmt->execute();
      }
Sign up to request clarification or add additional context in comments.

Comments

0

If you insist on using mysql_XXX:

foreach ($movieInfo['genres'] as $genre) {
    $genre = mysql_real_escape_string(strip_tags($genre['name']));
    $genreid = mysql_real_escape_string(strip_tags($genre['id']));
    mysql_query("INSERT INTO tblMovies (movie_id, genre_id, genre_name) VALUES ($movie_id , '$genreid', '$genre'");
}

Comments

0

I would insist that insert multiple records in database by firing single query instead of firing seperate query for each record.

E.g.:

INSERT INTO tblMovies
  (genre_id, genre_name)
VALUES
  ('Name 1', 'Value 1'),
  ('Name 2', 'Value 2'),
  ('Name 3', 'Value 3'),
  ('Name 4', 'Value 4');


//Prepare the entire query using foreach and then fire single query.
foreach ($movieInfo['genres'] as $genre) {
    $genre = mysql_real_escape_string(strip_tags($genre['name']));
    $genreid = mysql_real_escape_string(strip_tags($genre['id']));
    $parts[] = "('.$genreid.', '.$genre.')";
}

$str = implode("," $parts);
$query = "INSERT INTO tblMovies (genre_id, genre_name) VALUES ".$str.";";
mysql_query($query) or die(mysql_error());

Note: I have used mysql as you have mentioned in question but it is recommended to switch to mysqli or PDO. Also, from the question you have mentioned, I assume that $movie_id is auto-increment.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.