【问题标题】:Insert form $_POST array into a MySQL database using mysqli使用 mysqli 将表单 $_POST 数组插入 MySQL 数据库
【发布时间】:2016-08-26 03:17:46
【问题描述】:

我有一个 $_POST 数组,我正在尝试编写一个插入到 MySQL 数据库中的代码,而不必列出所有字段名称。

数组是单行,需要插入到数据库中。

数组如下所示:

Array
(
    [membership_type] => 4
    [title] => Mr
    [first_name] => John
    [last_name] => Smith
    [known_as] => John
    [address_1] => 10 High Street
    [address_2] => Big House
    [address_3] => Big Road
    [address_4] => Chipping Sodbury
    [address_5] => Bristol
    [post_code] => BS37 1AB
    [home_tel] => 01454 123456
    [mobile] => 07777 123456
    [email] => john@email.com
    [confirm_email] => john@email.com
    [day_dob] => 21
    [month_dob] => 09
    [year_dob] => 1974
    [volunteer] => on
    [employment_status] => employed
    [college_nus] => 
    [employment_address] => 50 Station Road
Chipping Sodbury
Bristol
BS37 2CD
    [occupation] => Managerial/Professional
    [employement_email] => john@work.com
    [employement_phone] => 01454 654321
    [terms] => 1
)

为方便起见,我已将表单字段名称编码为与数据库中的字段名称相对应。

非常感谢,

约翰

【问题讨论】:

  • 这感觉是个坏主意。如果您只是遍历字段并插入用户提供的任何数据,您将如何处理每个字段级别的验证?
  • @MattRaines 该表单正在使用 Foundations 数据遵守,因此所有验证都在表单提交之前完成。
  • 这篇文章可能对你有所帮助stackoverflow.com/questions/19665981/…
  • 我不知道 Foundations 但它 looks like 一个 客户端 验证。如果您遵循此处的任何答案或链接的问题,您需要绝对确定用户没有提供名为 id) VALUES(1, 2, 3, 4, 5, ...); DROP TABLE Students; -- 的表单字段
  • @smnvhn - 我尝试了该帖子中的代码并得到一个致命错误:在答案代码的第 4 行调用未定义函数 insert_data() 错误:insert_data($mysqli, $array, $表名);

标签: php mysql


【解决方案1】:

你可以使用这个方法:

注意:我使用 PDO

首先像这样连接到数据库:

$connection = new PDO('mysql:host=' . yourHost . ';dbname=' . youDbName . ';charset=utf8', DBUser, Dbpass);

$data=$_POST;
  $bind = ':' . implode(',:', array_keys($data));
        $field = explode(",", $bind);
        $returnQuery = "INSERT INTO `tableName` (" . implode(",", array_keys($data)) . ") VALUES (" . $bind . ") ";
        $bind = $connection ->prepare($returnQuery);
        $bind->execute(array_combine($field, array_values($data)));

希望有帮助

【讨论】:

  • @mohshenshakibafar - 尝试了 PDO 方法并得到以下错误 - 致命错误:使用 $this when not in object context in ....
  • 嗯,我为你解决了这个问题:)
  • @mohshenshakibafar - 包括连接字符串,现在得到 - 致命错误:当不在对象上下文中时使用 $this...
  • @JohnHiggins ,你确定你复制了上面的所有代码并将变量和常量更改为你的数据库吗?(比如:你的主机必须更改为 localhost 或...)
  • @mohshenshakibafar- 这是我正在使用的连接字符串:$connection = new PDO('mysql:host=10.10.10.10;dbname=database', user, password);
【解决方案2】:

你可能需要这样的东西:

<?php
$query = "";
if(isset($_POST)){
    foreach( $_POST as $key => $val ) {
    $query .= " `$key`='$val', ";
    }
$query = preg_replace('/,$/', '', $query); // removes the last comma
}
//$query: `name`='pedro', `email`='stack@stack.com' 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-03
    • 2013-11-30
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 2015-02-27
    相关资源
    最近更新 更多