在具有重复的单个列上插入多行

时间:2015-05-05 01:14:51

标签: php mysql

这里有新手。我有关于插入语法的问题。我希望我的表看起来像ID作为主键(AI,NN,),我可以在文档上输入具有相同案例和名称的多个项目。我目前正在使用一个php脚本,从结果中提取这些信息,将它们插入到数据库中,但是在语法方面存在问题。

   ID|    Case|  Name| Document| Date
 ----------------------------------------------
   1     233    alex    ITR      2015-1-1
   2     233    alex    ITR      2015-1-1
   3     233    alex    NULL     0000-0-0
   4     234    ben     COC      2015-3-3
   5     234    ben     VAT      2015-3-3
   6     234    ben     NULL     0000-0-0

我的代码是这样的:

 $sql="INSERT INTO table1 (Case, Name, Document, Date) VALUES ('$casenum','$name','$doc1-5(*this is where I dont know what todo)','$date1-5(this also)

3 个答案:

答案 0 :(得分:0)

如果您只有特定的文件和日期列表,那么您只能使用数组吗?

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$docs =('ITR', 'COC', etc);
$date =('2015-1-1', etc);

// prepare and bind    
$stmt = $conn->prepare('INSERT INTO table1 (Case, Name, Document, Date) VALUES (?, ?, ?, ?)');
$stmt->bind_param('ssss', $casenum, $name, $docs[0-4], $date[0-4]);
$stmt->execute();
$stmt->close();
$conn->commit(); //otherwise your data won't save

还要确保始终使用prepare和bind_param以防止sql注入 - 这一点至关重要,否则你的整个数据库可能会搞砸

答案 1 :(得分:0)

如果你想在一个sql语句中添加多个值,你可以在最后安排它们:

INSERT INTO table1 (Case, Name, Document, Date) VALUES (233, 'alex', 'ITR', '2015-1-1') , (233, 'alex', 'NULL', 0000-0-0) , …

如果你有一个像这样的$values数组:

Array (
    Array (
        [Case] => 233,
        [Name] => 'alex',
        [Document] => 'ITR',
        [Date] => '2015-1-1'
    ),
    …
)

您可以考虑做类似的事情:

$values = // def you array here
$texts = array_map( function($value) { return "({$value['Case']}, '{$value['Name']}', '{$value['Document']}', '{$value['Date']}')"; },
                    $values );
$sql = 'INSERT INTO table1 (Case, Name, Document, Date) VALUES ' . implode(',', $texts);

答案 2 :(得分:0)

听起来您希望多次重复使用该名称,而该人的文档和日期可能会发生变化。所以你真的只想为2个人插入记录,但他们有多个文件要插入。你的SQL并没有真正规范化,并且可能有更好的方法来做到这一点,但为了避免混淆,你现在可以如何完成它。

$values = array($case, $name, $document, $date)

INSERT INTO table1 (case, name, document, date) VALUES (implode(", ", $values);

值数组可以根据需要重复多次,但这是第一条记录的样子。您可以使用与MySQL插入语句一样插入的顺序,然后数组中的下4个项目将是第二个插入,接下来的4个将是第3个,等等。

你必须重复这个案例和名称,所以这个数组的一个非常粗略的例子可能如下所示:

$values = array($case0, $name0, $document0, $date0, $case1, $name1, $document1, $date1)

我会使用array_push()并将每个项目推入每个循环以构建数组。

希望这会有所帮助。当你开始使用mysqli并开始进入OOP时,你可以通过更简单的方式做到这一点。但就目前而言,这应该可以完成工作。