使用mysqli将多列插入表中

时间:2013-11-07 13:25:21

标签: php sql mysqli

我正在尝试将表单数据插入到我的sql表中。表格数据是一份长问卷,有多个问题。这意味着我插入的表有多列,确切地说是30。

有没有办法让我用最少或最有效的代码快速插入一行30列?也许我的表单中的“name”值可以等于my表中的变量名?我的表单是普通文本字段和一些复选框组的混合。

我正在使用php并希望使用mysqli预处理语句。

TLDR:我可以缩短这个吗?:

$query = "INSERT INTO table (a, b, c, d, e , f , g , h ,i j, ........) 
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,....)";

mysqli_stmt_bind_param($stmt,'sssiiisiiiiiiiiiisss...', ....);

或者我是否需要蛮力?

2 个答案:

答案 0 :(得分:1)

Afaik不,你不能缩短它。

但您可以更改数据库模型,结果记录只包含一个与问题相关的答案以及答案来自的用户。因此,您在测验中有多少问题也是可变的。如果测验只有2个问题,那么你没有超大的28列。

table: user
-----------
id (PK)
username

table: quiz
-----------
id (PK)
title (FK)

table: question
---------------
id (PK)
question
quiz_idfk (FK)


table: answer
-------------
id (PK)
answer
question_id (FK)
user_id (FK)

使用该模型,结果的插入将是(仅伪代码):

foreach($_POST['answer'] as $qid => $ans) {
    // sql: INSERT INTO answer SET answer = :ans, question_id = :qid, user_id = :uid

    // :ans the answer text ($ans)
    // :qid the question id ($qid)
    // :uid the currently logged in user
}

答案 1 :(得分:1)

您可以尝试使用mysqli_stmt_bind_param来调用call_user_func_array并传入一系列参数:

$sql_link = mysqli_connect('localhost', 'my_user', 'my_password', 'world'); 
$type = "isssi"; 
$param = array("5", "File Description", "File Title", "Original Name", time()); 
$sql = "INSERT INTO file_detail (file_id, file_description, file_title, file_original_name, file_upload_date) VALUES (?, ?, ?, ?, ?)"; 
$sql_stmt = mysqli_prepare ($sql_link, $sql); 

call_user_func_array('mysqli_stmt_bind_param', array_merge (array($sql_stmt, $type), $param); 
mysqli_stmt_execute($sql_stmt); 

source