如何将字符串插入数据库表中的不同列?

时间:2016-02-22 12:59:26

标签: php mysql arrays sql-server string

基本上我已经从pdf文件中创建了一个字符串,该字符串包含逗号分隔值,我现在需要将其插入到表中的不同列中。 我会尝试类似问题的答案here,但我不能满足我的需要。

我已经尝试将该字符串扩展为数组,因此逗号是每个元素分隔符,如下所示:

$array = explode(',', $text);

但由于我只有3列进入表中,我需要将这些值排序到这些列中,这样每个第三个字符串都会进入第一列,并且所有字符串都跟随到以下列。我尝试这样做:

$duzina=count($array);
        for($i=0;$i<$duzina;$i++) {
            if ($i = 0 && $i < 3) {
                $mysqli->query("INSERT INTO `test` (`name`, `surname`, `email`) VALUES
                (
                    '" . trim($array[$i]) . "',
                    '" . addslashes($array[$i + 1]) . "',
                    '" . addslashes($array[$i + 2]) . "'
                )
            ");
            }
            if ($i/3 == 0) {// has found a 3rd,6th,9th element of an $array

                $mysqli->query("INSERT INTO `test` (`name`, `surname`, `email`) VALUES
                (
                    '" . trim($array[$i]) . "',
                    '" . addslashes($array[$i + 1]) . "',
                    '" . addslashes($array[$i + 2]) . "'
                )
            ");
            } else {
                $mysqli->query("INSERT INTO `test` (`name`, `surname`, `email`) VALUES
                (
                    '" . trim($array[$i]) . "',
                    '" . addslashes($array[$i + 1]) . "',
                    '" . addslashes($array[$i + 2]) . "'
                )
            ");
            }

但它所做的只是插入$array的前3个元素。请帮忙

3 个答案:

答案 0 :(得分:3)

%而不是/之外,其他部门没有,所以请替换为:

if ($i/3 == 0) {

if ($i%3 == 0) {

答案 1 :(得分:0)

2件事:

首先使用if / elseif / else

if ($i = 0 && $i < 3) {
    ...
}
elseif ($i%3 == 0) {
    ...
}
else
{
    ....
}

第二:

$i%3 == 0而非$i/ 3 == 0

答案 2 :(得分:0)

使用准备好的陈述 重构您的数据以使其在代码中有意义(对调试很有用)
明智地循环(增加3)

请注意,下面的代码不是现场测试,只是概念验证。

$array = loadpdfwhatever();
$length = count($array);

// Restructure the raw data to be meaningful to a human. Can be skipped,
// but this will help you debugging in + 3 weeks from now :-)
$restructured = [];
for($i=0;$i<$length;$i+=3) { // note the $i+3 to increment by 3.
    $restructured[] = ['name'=> $array[$i],
                       'surname'=> $array[$i+1],
                       'email'=> $array[$i+2]];
}


// Using prepared statements we only have to build up the query once.
// Makes code faster and more efficient.
if ($stmt = mysqli_prepare($link, "INSERT INTO `test` (`name`, `surname`, `email`) VALUES ( ?, ?, ? ) ")) {
    foreach($restructured as $insert) {
        mysqli_stmt_bind_param($stmt,'sss',$insert['name'],
                                           $insert['surname'],
                                           $insert['email']); 
        mysqli_stmt_execute($stmt)
    }
}