2013-03-11 2 views
0

Когда я повторяю мой SQL запрос он выводитВторя SQL запрос добавляет новую строку

the volunteer id is 312INSERT INTO volunteer_events (event_id, volunteer_id) VALUES ('91 
', '312') 

Он добавляет новую строку после '91 вместо того, все это в одной строке. Мне было интересно, что я делаю, что заставляет его добавить новую строку.

public function addUserToEvent($event,$volunteer) 
{ 
    $event_id = $event; 
    echo "the event id is ". $event_id; 
    $volunteer_id = $volunteer; 
    echo "the volunteer id is ". $volunteer_id; 
    $sql = "INSERT INTO volunteer_events (event_id, volunteer_id) VALUES ('$event_id', '$volunteer_id')"; 
    echo $sql; 
    return mysql_query($sql); 
} 

Я звоню addUserToEvent здесь

if(isset($_POST["events"])){ 
    $eventIds = $_POST["events"]; 
    $N = count($eventIds); 
    for($i=0; $i < $N; $i++) { 
     echo "</br>"; 
     echo "The events IDs are"; 
     echo "</br>"; 
     echo($eid = $eventIds[$i]); 

    $sql = "SELECT distinct v.id 
      FROM volunteers v 
      WHERE v.first_name = '$fname' 
      AND v.last_name = '$lname' 
      AND v.email = '$email'"; 

    $results = $db->q($sql); 
    if($row = $results->getAssoc()) 
     { 
      $vID = $row['id']; 
      echo "the vid is ". $vID; 
     } 
     echo "</br>"; 
     echo " the eid is blah ".$eid; 
    echo $db->addUserToEvent($eid, $vID); 
    } 


} 
+2

'var_dump ($ event_id);' – zerkms

+0

Возможно, что event_id имеет значение «91 \ n», и в этом случае решение проблемы ($ event_id) или typecasting решит проблему. –

+0

BTW, ваш код цикла не идеоматичен, почему бы не 'foreach ($ eventIds as $ eid)'? – Barmar

ответ

2

Очень легко исправить, просто бросить в целое.

public function addUserToEvent($event,$volunteer) 
{ 
    $event = (int) $event; 
    $volunteer = (int) $volunteer; 
    $event_id = $event; 
    echo "the event id is ". $event_id; 
    [...] 

То, что я имею в виду, что тип данных поля volunteer.id является VARCHAR, где он должен быть INT. Литье ваших переменных всегда хорошая практика.

+2

Почему бы не исправить корень проблемы? – zerkms

+0

Это безопаснее, вы получаете данные от POST, поэтому приведение в int гарантирует, что у вас всегда есть номер без каких-либо дополнительных функций. –

+0

Глядя на этот код, похоже, что ничего не проверено вообще: предполагается, что $ _POST ['events'] будет массивом на примере. И вы не можете знать, что такое $ vId, мы не знаем, как это было вставлено в базу данных и какой тип данных имеет это поле. –

Смежные вопросы