1

我想使用我的表的列和除 id、created_by .etc 之外的内容的 NULL 或空白值创建一个 INSERT 语句。我试图避免重复。现在我得到:

INSERT INTO testimonials (id, created, created_by, id, quote, name, position, company, published, created, created_by, last_modified_by, last_modified) VALUES ('257927816', NOW(), '1', '')

并且我希望在 VALUES 部分中为除我定义的前 3 个之外的所有内容迭代空白值。

function insertBlankWithID($table, $postFxn) {
    global $randomID;
    $id = $randomID;
    $resultInsert = mysql_query("SELECT * FROM " . $table);
    if (!$resultInsert) {
        echo '<div class="ec-messages messages-error">'.QUERY_ERROR.'</div>';
        include($cmsdir . FOOTER_EXIT);
        exit();
    }
    $columns = array();
    while ($row = mysql_fetch_assoc($resultInsert)) {
        if (empty($columns)) {
            $columns = array_keys($row);
        }
    }
    //$sql = 'INSERT INTO `testimonials` (`id`, `quote`, `name`, `position`, `company`, `published`, `created`, `created_by`, `last_modified_by`, `last_modified`) VALUES ('.$id.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);';
    $sql = sprintf("INSERT INTO %s (id, created, created_by, %s) VALUES ('".$id."', NOW(), '".$_SESSION['user_id']."', '%s')", $table, implode(', ', $columns), implode("',  '", ''));
    mysql_query($sql);
    /*
    if (!$sql) {
        echo '<div class="ec-messages messages-error">'.QUERY_ERROR.'</div>';
        exit();
    }
    */
    echo $sql;
}
// redirect(basename($_SERVER['PHP_SELF'], ".php").'?s=output&id='.$id

insertBlankWithID('testimonials', $postFxn);
4

1 回答 1

1

查看您的代码,您应该将 限制select为 1,(即$resultInsert = mysql_query("SELECT * FROM " . $table. " limit 1");您不需要信息,只需要键。这消除了while循环的需要。

现在,要获取除前三个之外的所有键,对于您的$columns变量,请使用array_slice例如$columns = array_slice($columns, 3); 或者,如果它不是前三个时select *,您可以这样做$columns = array_diff($columns, array('id', 'created', 'created_by') );

现在,要null在前三个之后插入,您将插入一个字符串 - 这不起作用,相反,您可以创建一个与新的计数匹配的空值数组,$columns例如:

$blanks = array_fill(0, count($columns), 'null');

并在创建您的声明时, do implode(", ", $blanks),这将使您$sql看起来像:

$sql = sprintf("INSERT INTO %s (id, created, created_by, %s) VALUES ('".$id."', NOW(), '".$_SESSION['user_id']."', '%s')", $table, implode(', ', $columns), implode(", ", $blanks));

这应该可以解决您所描述的问题。

另外,当我在这里时,应该注意的是,您不应再使用mysql_函数,而应转而使用mysqli_相同类型的面向过程的 MySQL 访问。

于 2013-02-24T03:18:50.247 回答