2016-07-05 64 views
1

我讀了很多教程,瞭解如何在一個查詢中插入多行,因爲我必須處理PHP表單(v5.4)中的多個選擇問題。INSERT INTO與MySQL和PDO的陣列

不幸的是,我的查詢中仍然有錯誤。

你能幫我嗎?

爲了更精確有關目的,我做了一個表格,我創建的數據庫中的MySQL與:

  • 一個表(A),用於存儲從單選按鈕所有單個值和文本的問題與序列號。

  • 每個多項選擇問題的表格,其中我在一列中列出了所有可能的答案,在另一列中列出了一個ID代碼。

  • 和「中間」表中的每個多個選擇問題,以存儲比在表A中插入過程中自動創建的一個,並從在複選框問題
    (如此選擇的值的ID相同的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($ values)」改爲「VALUES'($ 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