来自MYSQL中的For循环的PHP字符串插入查询不起作用

时间:2013-12-29 11:57:24

标签: php mysql for-loop

我有一个脚本如下。 $ _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位于另一个文件中。

3 个答案:

答案 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或等效语句准备语句。