gpt4 book ai didi

php - MySQL INSERT 的语法,$_POST 变量数组进入 VALUES

转载 作者:行者123 更新时间:2023-11-29 05:35:06 25 4
gpt4 key购买 nike

我是 PHP 和 MySQL 查询结构的新手。我昨天问了一个关于列的类似问题,现在需要有关 VALUES 的帮助。我有一个大型表格的处理器。一些字段是必需的,大多数字段是用户可选的。在我的例子中,HTML id 和 MySQL 列名是相同的。我找到了有关使用数组将 $_POST 转换为 INSERT INTO 的字段和值的教程,但我无法让它们工作 - 几个小时后。我退后一步,使用数组和变量制作了一个非常简单的 INSERT,但我仍然感到困惑。下面几行将 5 个变量的值插入到一个包含 100 多个列的数据库中。前4项为字符串,第5项,monthlyRental为整数。

$colsx = array('country', 'stateProvince', 'city3', 'city3Geocode', 'monthlyRental');
$col_string = implode(',', $colsx);
$query = "INSERT INTO `$table` ($col_string) VALUES ( '$country', '$stateProvince', '$city3', '$city3Geocode', '$monthlyRental')";

按照这个想法,我使用预处理变量来构造一个数组,然后将其内爆以创建一个字符串。

//these variables are "pre-processed", e.g., $country=$_POST['country'] and validated, but not yet mysql_real_escape_string
$valsx = array( '$country', '$stateProvince', '$city3', '$city3Geocode', '$monthlyRental' );
$val_string = implode(",", $valsx);
$query = "INSERT INTO `$table` ($col_string) VALUES ( $val_string )";

它不起作用。我试过改变很多东西,但没有结果。我用这段代码得到的 MySQL 错误是 - Unknown column '$country' in 'field list' 它指的是 $valsx 数组中的 '$country',但我看不出这是一个字段列表,或者如何解决问题。

请具体建议。我是 MySQL 和 PHP 的新手。

好的,根据 Iserni 的建议,这是当前代码。它不执行。我需要有关他的代码的帮助,我需要有关在何处以及如何放置错误消息的帮助。

$colsx = $fields = $valsx = $values = array();
$colsx = array('country', 'stateProvince', 'city3', 'city3Geocode', 'monthlyRental');
$col_string = implode(',', $colsx);
$valsx = array( "$country", "$stateProvince", "$city3", "$city3Geocode", "$monthlyRental" );
$val_string = implode(",", $valsx);
foreach($colsx as $col) {
$fields[] = $col;
if ( is_numeric($_POST[$col]) ) {
$values[] = mysql_real_escape_string($_POST[$col]);
}else{
$values[] = "'".mysql_real_escape_string($_POST[$col])."'";
}
}
$fields_sql = implode(',', $fields);
$values_sql = implode(',', $values);
$query = "INSERT INTO `$table` ($fields_sql) VALUES ($values_sql);"
if (!mysql_query($query,$conn))
{
die('<li class=error>an error occurred posting to the database. </li>'. mysql_error());
}

最佳答案

我会这样做:

$colsx = array('country', 'stateProvince', 'city3', 'city3Geocode', 'monthlyRental');
// List of optional fields
$colsy = array('otherfield', 'other2', ...);

// Building the query
$fields = array();
$values = array();

// Mandatory fields
foreach($colsx as $col)
{
if (!isset($_POST[$col]))
die("MISSING field $col";
$fields[] = $col;
if (is_numeric($_POST[$col]))
$values[] = mysql_real_escape_string($_POST[$col]);
else
$values[] = "'".mysql_real_escape_string($_POST[$col])."'";
}

// Optional fields
foreach($colsy as $col)
{
//if (!isset($_POST[$col]))
// die("MISSING field $col";
$fields[] = $col;
if (is_numeric($_POST[$col]))
$values[] = mysql_real_escape_string($_POST[$col]);
else
$values[] = "'".mysql_real_escape_string($_POST[$col])."'";
}

$fields_sql = implode(',', $fields);
$values_sql = implode(',', $values);

$query = "INSERT INTO `$table` ($fields_sql) VALUES ($values_sql);"

如果您已经有了经过验证的字段,您可以这样做(但是,正如我看到有人建议的那样,使用 PDO 而不是 mysql_ 函数会更好;稍后再考虑这样做)。

$data = array(
// FIELD VALUE ("$country" and $country are the same thing)
'country' => $country,
'stateProvince' => $stateProvince,
'city3' => $city3,
...
);

// If you need to add a field conditionally, you do it like this:
// if (isset($_POST['newfield']))
// $data['newfield'] = $_POST['newfield'];
// or also, maybe:
//
// if (isset($_POST['newfield']) && !empty($_POST['newfield']))
// $data['newfield'] = $_POST['newfield'];

// Process the values in $data to get SQL fields (PDO does this by itself)

$values = array();
foreach($data as $field => $value)
{
if (is_numeric($value))
$values[] = $value;
else
$values[] = "'".mysql_real_escape_string($value)."'";
}
// Now we have all we need. The "fields" are $data's keys.
$fields_sql = implode(',', array_keys($data));
$values_sql = implode(',', $values);

$query = "INSERT INTO `$table` ($fields_sql) VALUES ($values_sql);";

使用 PDO 同样的事情:

$data = array(
// FIELD VALUE ("$country" and $country are the same thing)
'country' => $country,
'stateProvince' => $stateProvince,
'city3' => $city3,
...
);

// Process $data to get SQL fields (we could use array_fill)
$values = array();
foreach($data as $field => $value)
$values[] = '?'; // Placeholder, without quotes

$fields_pdo = implode(',', array_keys($data));
$values_pdo = implode(',', $data);

// This is now INSERT INTO mytable (city,rent,...) VALUES (?,?,?,...);
$query = "INSERT INTO $table ($fields_sql) VALUES ($values_sql);";

$q = $conn->prepare($query);
$q->execute(array_values($data));

关于php - MySQL INSERT 的语法,$_POST 变量数组进入 VALUES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com