我有一个脚本如下。 $ _POST中有一些值要插入数据库。 但它没有用。 需要你的帮助。
<?
$field = array(Priority_Rank, Attending_Period, Priority_Point_Low, Priority_Point_High, Other_Consideration);
$fields = implode(',', $field);
$fieldpost = array();
for ($i=0; $i<count($field); $i++) {
$fieldpost[] = $_POST[$i]; }
$fieldposts = implode (',', $fieldpost);
$query1 = "INSERT INTO $maindb ($mainID, $fields) VALUES ('$seq',$fieldposts)";
mysql_query($query1); ?>
我发现问题出现在VALUES(...,$ fieldposts)中,因为如果我将查询更改为以下内容,则表明它正常运行。
$query1 = "INSERT INTO $maindb ($mainID, $fields) VALUES ('$seq','$_POST[0]','$_POST[1]','$_POST[2]','$_POST[3]','$_POST[4]')";
但是由于这个查询也会被其他具有不同数量$ _POST的脚本使用,我真的需要它们在这个文件中循环。
注意:$ field位于另一个文件中。
答案 0 :(得分:1)
你需要这样做:
for ($i=0; $i<count($field); $i++) {
$fieldpost[] = "'" . mysql_real_escape_string($_POST[$i]) . "'";
}
以便将值括在引号中并正确转义。
答案 1 :(得分:0)
假设您有一个包含要插入的行的数组:
<?php
$lines = array(
array("Value 1A", "Value 2A", "Value 3A", "..."),
array("Value 1B", "Value 2B", "Value 3B", "..."),
array("Value 1C", "Value 2C", "Value 3C", "...")
// ...
);
首先,you need to escape your values在查询中检查它们之前,特别是如果它们来自用户($_POST
等)。 mysql_real_escape_string()
为你做到了。
<?php
foreach ($lines as &$line) {
foreach ($line as &$value) {
$value = '\'' . mysql_real_escape_string($value) . '\'';
}
}
然后构建您的个人值集:
<?php
$sets = array();
foreach ($lines as $line) {
$sets[] = '(' . implode(', ', $line) . ')';
}
然后才构建查询
<?php
$query = 'INSERT INTO yourtable (field1, field2, field3) VALUES '
$query .= implode(', ', $sets)
mysql_query($query)
你当然可以合并两个第一个循环,我只是为了解释而分开:
<?php
$sets = array();
foreach ($lines as $line) {
foreach ($line as &$value) {
$value = '\'' . mysql_real_escape_string($value) . '\'';
}
$sets[] = '(' . implode(', ', $line) . ')';
}
$query = 'INSERT INTO yourtable (field1, field2, field3) VALUES '
$query .= implode(', ', $sets)
mysql_query($query)
答案 2 :(得分:0)
尝试以下内容以确保发布的字段名称有效且值正确转义。
$fields = array('column_a', 'column_b', 'column_c');
foreach($_POST as $name => $value) {
if (isset($fields[$name])) {
$columns[] = $fields[$name];
$values[] = "'" . mysql_real_escape_string($value) ."'";
}
}
if (! empty($columns)) {
$sql = sprintf('INSERT INTO %s (%s) (%S)', $tableName, implode(',', $columns), implode(',', $values));
}
您真的应该使用参数占位符(?
)作为值,并使用PDO或等效语句准备语句。