2016-07-05 6 views
1

Я прочитал много руководств, чтобы понять, как вставлять несколько строк в один запрос, поскольку мне приходится иметь дело с вопросом о множественном выборе в форме PHP (v5.4).INSERT INTO массив с MySQL и PDO

К сожалению, у меня все еще есть ошибки в моем запросе.

Не могли бы Вы помочь мне?

Чтобы быть более точным о цели, я сделал вид, и я создал базу данных в MySQL с:

  • одной таблицей (A), чтобы сохранить все отдельные значения из радио-кнопки и текстовые вопросы с SERIAL id.

  • таблица для каждого вопроса с несколькими вариантами выбора, в которой перечислены все возможные ответы в одном столбце и идентификационный код в другом столбце.

  • и «промежуточная» таблица для каждого вопроса с несколькими вариантами выбора, чтобы сохранить тот же идентификатор, который был создан автоматически при вставке в таблицу A и идентификатор из значений, выбранных в поле вопроса
    (так, для одной формы заполнены, я ожидаю, чтобы получить одну строку в таблице а, и столько же строк, как выбранные значения в каждой соответствующей «промежуточной» таблицы.

Мой PHP код (который относится только к одному несколько вариантов вопрос в качестве теста):

try { 
    $pdo = new PDO('mysql:host=myserver_url;dbname=my_db', 'my_user','my_pass'); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); 
} 
catch(PDOException $e) { 
    echo 'Fail to connect'; 
    exit(); 
} 

try { 
    if(isset($_POST['add'])){ 
     if(isset($_POST['checkbox_name'])) { 
      $values = '('.implode('),(', $_POST['checkbox_name']).')'; 
      $sql =$pdo->exec("INSERT INTO my_db.my_table (field1) 
          VALUES ($values) "); 
     } 
    } 
} 
catch(PDOException $e) { 
    $msg = 'ERROR PDO in ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage(); 
    die($msg); 
} 

Код HTML:

<body>  
    <form name="form_1" method="post" action="form_1.php"> 
     <input type="checkbox" name="checkbox_name[]" value="1"><label >Telephone</label><br/> 
      <input type="checkbox" name="checkbox_name[]" value="2"><label >Mail</label><br/> 
      <input type="checkbox" name="checkbox_name[]" value="3"><label >Other</label><br/> 
      <br/> 
      <br/>   
      <input type="submit" name="add" value="SEND"/> 
    </form> 

Большое спасибо за помощь!

+0

Не отвечая на ваш вопрос, пожалуйста, используйте подготовленные заявления! Просто использование PDO не делает ваш скрипт безопасным для SQL-инъекций. Создайте и подготовьте свой запрос с помощью вопросительных знаков [количество элементов массива], а затем вставьте его с помощью '$ stmt-> execute ($ array)' вместо того, чтобы его развязать. Проверьте [этот ответ] (http://stackoverflow.com/a/327384/1154316) о том, как это сделать. – tillz

+0

Какой конкретный учебник вы прочитали? –

+0

Эхо из '$ values' вы должны увидеть свою проблему – RiggsFolly

ответ

1

Я, наконец, решил свою проблему. Для тех, кто интересуется решением, здесь (с «получить последний бонус id»):

try { 
    if(isset($_POST['add'])){ 
     if(isset($_POST['nature_contact'])) { 
      $sql = "INSERT INTO db.int_contact (id_g,id_nature_contact) VALUES " .rtrim(str_repeat('('.$lastID.', ?),', count($_POST["nature_contact"])), ','); 
      $statement = $pdo->prepare($sql); 
      $count = 1; 
      foreach($_POST["nature_contact"] as $nature_contact) { 
       $statement->bindValue($count++, $nature_contact); 
      } 
      $statement->execute(); 
     } 
    } 
} 
// and then add a catch exceptions