2016-07-05 59 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