使用MySQL和MySQL将数据存储在MySQL数据库中PHP

时间:2010-04-22 22:38:34

标签: php mysql

我是PHP和MySQL的新手,我正在尝试存储用户输入的来自以下字段$skill, $experience, $years的数据,如果需要,用户还可以添加$skill, $experience, $years的其他字段。每个字段中的1个可能是每个字段的倍数。

我想知道如何使用PHP和MySQL将字段存储在我的MySQL数据库中?我有以下脚本,但我知道它错了。有人可以帮我修复下面列出的脚本吗?

这是PHP和MySQL代码。

$skill = serialize($_POST['skill']);
$experience = serialize($_POST['experience']);
$years = serialize($_POST['years']);


for (($s = 0; $s < count($skill); $s++) && ($x = 0; $x < count($experience); $x++) && ($g = 0; $g < count($years); $g++)){
    $mysqli = mysqli_connect("localhost", "root", "", "sitename");
    $query1 = "INSERT INTO learned_skills (skill, experience, years) VALUES ('" . $skill[$s] . "', '" . $experience[$x] . "', '" . $years[$g] . "')";

    if (!mysqli_query($mysqli, $query1)) {
            print mysqli_error($mysqli);
            return;
    }

}

这是我的MySQL表。

CREATE TABLE learned_skills (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
skill TEXT NOT NULL,
experience TEXT NOT NULL,
years INT NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE u_skills (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
skill_id INT UNSIGNED NOT NULL, 
users_id INT UNSIGNED NOT NULL,
PRIMARY KEY (id)
);

3 个答案:

答案 0 :(得分:2)

您将创建两个具有1对多关系的表:

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `username` varchar(40) collate latin1_general_ci NOT NULL,
  `password` varchar(255) collate latin1_general_ci NOT NULL
  PRIMARY KEY  (`id`),
  UNIQUE KEY `username` (`username`)
);



CREATE TABLE learned_skills (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL,
skill TEXT NOT NULL,
experience TEXT NOT NULL,
years INT NOT NULL,
PRIMARY KEY (id)
);

这样,用户可以拥有任意数量的列出技能。如果技能实际上只是一个小文本字符串(如“PHP”或“MySQL”),那么您应该使用VARCHAR类型而不是TEXT。如果是这种情况,一旦你开始,你会发现创建一个用户可以选择的技能列表并且只有一个skill_id而不是一个文本字段会更好。这有助于称为规范化(一种防止重复数据的方法)。

祝你好运。

答案 1 :(得分:0)

如果存在倍数,则必须为每个列创建一个列,或者将它们放入具有某种分隔符(skill1,skill2,skill3)的相同字段中。然后,在检索时,您可以使用该分隔符拆分数组。

答案 2 :(得分:0)

您可以根据建议使用具有列查找的多个表。

有时您可能希望像开始那样使用序列化数组。 但是,在序列化它之后,它是一个字符串,因此尝试按索引访问值没有意义。你有

 $skill = serialize($_POST['skill']);
...    

    $query1 = "INSERT INTO learned_skills (skill, experience, years) 
VALUES ('" $skill[$s] 

这不起作用。

您也可能想要做类似

的事情
$counter = min(count($skill), count($experience), count($years));
for($i = 0; $i < $counter; ++$i){

而不是

for (($s = 0; $s < count($skill); $s++) && ($x = 0; $x < count($experience); $x++) && ($g = 0; $g < count($years); $g++)){