I am trying to figure out why Codeigniter is inserting 2 times the same row in my Database. I'm using PDO as interface for mySQL. I was debugging it and I am sure the function bellow is not being executed two times. It happens in a particular case, if the two foreache's don't run because the array is empty, but if one of them runs the error doesn't happen.
`
public function save_all() //save all information with the launched flag FALSE
{
include(database_vars_url());
try
{
$this->add_new_skills();
if(!isset($_SESSION))
{
session_start();
}
$email = $_SESSION["email"];
$sql = "INSERT INTO $tbl_name_contest (user_id, contest_title, contest_overview, contest_description,
contest_category, contest_holder, contest_prize, contest_stage, contest_duration, contest_proj_duration,
contest_level, contest_finalist, contest_winner, contest_create, contest_launched, contest_edit,
contest_edit_id, contest_status, contest_delete)
VALUES (0, '$this->title', '$this->overview', '$this->description', '$this->category',
(SELECT customer_id FROM $tbl_name_customer WHERE user_id =
(SELECT user_id FROM $tbl_name_user WHERE user_email='$email')), '$this->prize', 0, '$this->contest_period',
'$this->project_period', -1, -1, -1, NULL, DEFAULT, NULL, -1, -1, DEFAULT); ";
foreach ($this->addon as $value)
{
$sql = $sql . "INSERT INTO $tbl_rel_contest_addon (add_contest_id, add_addon_id)
VALUES ((SELECT contest_id FROM $tbl_name_contest WHERE contest_title = '$this->title'
AND contest_overview = '$this->overview' AND contest_prize = '$this->prize'),
(SELECT addon_id FROM $tbl_name_addon WHERE addon_name = '$value')); ";
}
foreach ($this->skills as $value)
{
$sql = $sql . "INSERT INTO $tbl_rel_contest_skill (required_contest_id, required_skill_id)
VALUES ((SELECT contest_id FROM $tbl_name_contest WHERE contest_title = '$this->title'
AND contest_overview = '$this->overview' AND contest_prize = '$this->prize'),
(SELECT skill_id FROM $tbl_name_skill WHERE skill_name = '$value')); ";
}
echo $sql;
return $this->db->query($sql);
}
catch(Exception $e)
{
echo $e->getMessage();
}
return 0;
}
Here I have a log of the mySQL, the first two SELECTS are called by "$this->add_new_skills();" at the beginning of the function save_all(). These SELECTs were supposed to be just one as well. This order SELECT SELECT, INSERT INSERT, proves that the function save_all() is not being called two times, if it were being called two times the order would be SELECT INSERT SELECT INSERT.
138 Connect root@localhost on repsero
138 Query SELECT skill_name FROM skill WHERE skill_status=2
138 Query SELECT skill_name FROM skill WHERE skill_status=2
138 Quit
139 Connect root@localhost on repsero
139 Quit
140 Connect root@localhost on repsero
140 Query INSERT INTO contest (user_id, contest_title, contest_overview, contest_description, contest_category, contest_holder, contest_prize, contest_stage, contest_duration, contest_proj_duration, contest_level, contest_finalist, contest_winner, contest_create, contest_launched, contest_edit, contest_edit_id, contest_status, contest_delete) VALUES (0, 'Contest Name', 'Overview of the contest Overview of the contest Overview of the contest Overview of the contest Overview of the contest Overview of the contest ', 'Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description ', 'SEO', (SELECT customer_id FROM customer WHERE user_id = (SELECT user_id FROM user WHERE user_email='customer@repsero.com')), '300', 0, '5','1', -1, -1, -1, NULL, DEFAULT, NULL, -1, -1, DEFAULT)
140 Query INSERT INTO contest (user_id, contest_title, contest_overview, contest_description, contest_category, contest_holder, contest_prize, contest_stage, contest_duration, contest_proj_duration, contest_level, contest_finalist, contest_winner, contest_create, contest_launched, contest_edit, contest_edit_id, contest_status, contest_delete) VALUES (0, 'Contest Name', 'Overview of the contest Overview of the contest Overview of the contest Overview of the contest Overview of the contest Overview of the contest ', 'Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description ', 'SEO',(SELECT customer_id FROM customer WHERE user_id = (SELECT user_id FROM user WHERE user_email='customer@repsero.com')), '300', 0, '5', '1', -1, -1, -1, NULL, DEFAULT, NULL, -1, -1, DEFAULT)
140 Quit