我遇到了MySQL的问题。我使用PHP和mysqli将数据写入准备好的表中。但是,如果我提交表单,必须将哪些值写入表中,则每个值都会在表中生成新行。这是我的代码:
session_start();
$_SESSION["Field"]=array("Name1","Name2","Name3",...);
if(!empty($_POST)){
foreach($_SESSION["Field"] as $Variable){
if(!empty($_POST[$Variable])){
$_SESSION[$Variable]=$_POST[$Variable];
}}}
if(array_key_exists("Database",$Collection)){
$Database=mysqli_connect("localhost","dbadmin","password","mydatabase");
mysqli_query($Database,"insert into Table1 (PHPSESSID) values ('".session_id()."')");
foreach($_SESSION["Field"] as $Variable){
if(!empty($_POST[$Variable])){
$_SESSION[$Variable]=mysqli_real_escape_string($Database,$_SESSION[$Variable]);
mysqli_query($Database,"insert into Table1 ($Variable) values ('{$_SESSION[$Variable]}')");
}}
mysqli_close($Database);
}
更新:我认为问题是,因为所有变量应该(?)在一个mysqli任务中。但我没有发现任何相关信息。我对吗?应该像这样mysqli_query($Database,"insert into Table1 (Variable1,Variable2,Variable3) values ('Value1','Value2','Value3')");
吗?
更新2:我认为,它也可能是由于没有提交插入任务造成的,但是没有必要提交它,所以我不认为,这是问题。但我是MySQL和SQL的初学者,所以也许我错了。
它看起来都是我的问题的解决方案,但我不知道,如何在foreach循环中使用数组中的变量。任何人都可以帮助我吗?
答案 0 :(得分:1)
我认为在尝试使用它们之前,您需要了解foreach
和INSERT的作用!使用foreach
循环来构建SQL查询字符串,而不是提交到数据库。循环结束后,您将拥有一个可以执行的完整SQL查询。
编辑:忘记强制性的“在将它们插入数据库之前不要忘记逃避你的价值观!”
编辑2:这是一个答案。当然不优雅,没有经过测试,但可以做到这一点:
session_start();
if(empty($_POST) || !array_key_exists("Database", $Collection)){
exit;
}
$checklist = array("Name1", "Name2", "Name3");
$query = "INSERT INTO Table1 SET ";
$db = mysqli_connect("localhost", "dbadmin", "password", "mydatabase");
foreach($checklist as $v){
if(!empty($_POST[$v])){
$_SESSION[$v] = $_POST[$v];
$_POST[$v] = mysqli_real_escape_string($db, $_POST[$v]);
$query .= "$v='$_POST[$v]',"
}
}
$query .= "PHPSESSID='" . session_id() . "'";
mysqli_query($db, $query);
mysqli_close($db);