将4个数据插入数据库,但只在数据库中添加第2个数据

时间:2014-09-28 16:53:51

标签: php mysql sql-insert

当将数据插入表中时,该函数仅添加第二个数据。为什么其他数据没有被添加到表中?代码中有什么问题?

public function create($db,$table,array $columns,array $values){
//"CREATE DATABASE IF NOT EXISTS $db";
    $this->connection->query("CREATE DATABASE IF NOT EXISTS $db");

    $this->connection->select_db($db);

    $this->connection->query("CREATE TABLE IF NOT EXISTS $table (
'id' int(11) NOT NULL AUTO_INCREMENT,
 $columns[0] varchar(40) COLLATE utf8_unicode_ci NOT NULL,
 $columns[1] varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 $columns[2] varchar(20) COLLATE utf8_unicode_ci NOT NULL,
 $columns[3] varchar(200) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY ('id')
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=8 ;");

    for ($i=0;$i<count($columns);$i++) {
        $this->connection->query("INSERT INTO $table ($columns[$i]) VALUES ($values[$i])");
        echo $i."<br>".$columns[$i]."<br>".$values[$i]."<br>";
    }
}

$process=strtolower($_POST['select']);
$db=$_POST['database'];
$table=$_POST['table'];
$columns=explode(",", $_POST['columns']);
$values=explode(",", $_POST['values']);

if($process == "create"){
    $obj->create($db,$table,$columns,$values);
}

2 个答案:

答案 0 :(得分:0)

评论太长了。

您已经定义了一个包含五个非NULL列的表,这些列没有默认值。然后,您将一次插入表中一列。每个插入都将失败,因为其他列设置为NULL,这是不允许的。

修复您的代码,以便同时插入包含列的所有值的一行。

答案 1 :(得分:0)

您编写此循环的方式是为$columns数组中的每个出现插入一个新行。这将创建4行,每行包含一个包含值的列。

您要做的是单独创建列列表和值列表,然后运行一个查询,插入一行,并将所有列设置为值。

请尝试以下方法: -

$col_list = '';
$val_list = '';
foreach ( $columns as $idx => $column ) {
    $col_list .= $column . ',';
    $val_list .= "'$values[$idx]',";
}
// remove the trailing commas
$col_list = rtrim($col_list, ',');
$val_list = rtrim($val_list, ',');

$this->connection->query("INSERT INTO $table ($col_list) VALUES ($val_list)";

这应运行一个查询以插入一行,其中所有4列都有值。

您没有做任何事情来检查从屏幕传递给您的值是否包含您所期望的值,或者您传递的数据中实际上有4个字段和4个值,并且不包含任何危险值。 我假设您只是为了简洁而保留了此验证码,因此我不会提醒您有关检查从浏览器传递此类数据的完整性。