插入带有自动生成列的语句

时间:2013-02-24 02:10:02

标签: php dynamic insert

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

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);

1 个答案:

答案 0 :(得分:1)

查看您的代码,您应该将select限制为1(即$resultInsert = mysql_query("SELECT * FROM " . $table. " limit 1");,因为您不需要信息,只需要密钥。这样就无需{{1} }循环。

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

现在,要在前三个之后插入null,你会发现一个字符串 - 这不起作用,而是你可以创建一个与新$columns的计数相匹配的空值数组。为:

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

在创建语句时,请执行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访问。