我想创建一个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);
答案 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访问。