3

数组$solution是二维的。我需要将其内容保存到 SQL 表中。但是,在保存之前,我需要检查$solution[i][0]属于查询结果的那个SELECT num_arr FROM Schedule WHERE num_arr<>''

问题出在线路上$vals = implode(...)。如何在数组的第 i 行内爆逗号$solution?现在这一行生成字符串0,0,0,0而不是正确的值。

    $columns_land = array("`num_arr`","`start`","`fin`","`way`");
    $cols_land = implode(",",$columns_land);

    for($i=0; $i<sizeof($solution); $i++) {
            $vals = implode(',', array_map('implode_comma', $solution[$i]));
            query_land = "INSERT INTO `Sequence` (" . $cols_land . ") 
                          VALUES " . $vals . " 
                          WHERE num_arr='".$solution[$i][0]."' 
                          AND num_arr IN (SELECT num_arr FROM Schedule WHERE num_arr<>'')";

            $result_land = execute_query($query_land);
    }

    function implode_comma($arr) {
        return '(' . implode(',', $arr) . ')';
    }
4

1 回答 1

1

这句话让我很困惑:

$vals = implode(',', array_map('implode_comma', $solution[$i]));

由于implode_comma()需要一个数组,因此其中的每个项目$solution[$i]也必须是一个数组;但这意味着$solutions它本身必须是一个三维数组。

我认为你可以在你的循环中写这个:

$vals = implode(',', $solution[$i]);
$query_land = "INSERT INTO `Sequence` ($cols_land) 
    VALUES ($vals)
    WHERE num_arr='".$solution[$i][0]."' 
    AND num_arr IN (SELECT num_arr FROM Schedule WHERE num_arr<>'')";

$result_land = execute_query($query_land);

顺便说一句,你应该正确地转义你在 SQL 中使用的变量,但我不知道你正在使用哪个数据库层,所以我把它留给你。

于 2012-08-29T13:43:00.927 回答