-2

我在提交表单时收到此错误消息:

Error: Column count doesn't match value count at row 1

这是我的代码:

<?php
    $con = mysqli_connect("abcd.com", "test", "test", "test");
    // Check connection
    if (mysqli_connect_errno()) {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    $sql = "INSERT INTO survey1 (location, age, gender, marital, q1, q1_1, q1_2, q1_3, q1_4, q2, q3, q4, q5, q5_1, q5_2, q5_3, q5_4, q6, q7, q8, q8_others, q9, q9_others, q10, q11, q12, q12_1, q12_2, q12_3, q12_4, q13, q14, q15, q16, q17, q17_others, q18, q19, q20, q21, q22, q23, q24, q25, q25_others, q26, q27, q28, q29, q30, q31, q32, q32_1, q32_2, q32_3, q32_4, q33, q34, q34_others) VALUES('$_POST[location]','$_POST[age]','$_POST[gender]', '$_POST[marital]', '$_POST[q1]', '$_POST[q1_1]', '$_POST[q1_2]', '$_POST[q1_3]', '$_POST[q1_4]', '$_POST[q2]', '$_POST[q3]', '$_POST[q4]', '$_POST[q5]', '$_POST[q5_1]', '$_POST[q5_2]', '$_POST[q5_3]', '$_POST[q5_4]', '$_POST[q6]', '$_POST[q7]', '$_POST[q8]', '$_POST[q8_others]', '$_POST[q9]', '$_POST[q9_others]', '$_POST[q10]', '$_POST[q11]', '$_POST[q12]', '$_POST[q12_1]', '$_POST[q12_2]', '$_POST[q12_3]', '$_POST[q12_4]', '$_POST[q13]', '$_POST[q14]', '$_POST[q15]', '$_POST[q16]', '$_POST[q17]', '$_POST[q18]', '$_POST[q19]', '$_POST[q20]', '$_POST[q21]', '$_POST[q22]', '$_POST[q23]', '$_POST[q24]', '$_POST[q25]', '$_POST[q25_others]', '$_POST[q26]', '$_POST[q27]', '$_POST[q28]', '$_POST[q29]', '$_POST[q30]', '$_POST[q31]', '$_POST[q32]', '$_POST[q32_1]', '$_POST[q32_2]', '$_POST[q32_3]', '$_POST[q32_4]', '$_POST[q33]', '$_POST[q34]', '$_POST[q34_others]')";
    if (!mysqli_query($con, $sql)) {
        die('Error: ' . mysqli_error($con));
    }
    header("Location: thankyou.html");
    mysqli_close($con);
?>
4

3 回答 3

3

此错误是不言自明的 - 您试图通过提供 Y 值来设置 X 列,但 X 必须等于 Y。在其他工作中,如果您尝试通过提供 2 个值来设置 3 列,您将收到该错误。检查传递的参数并添加缺少的参数

如果您使用的是 MySQL,那么我建议使用不同的语法,这样更不容易出错:

 INSERT INTO table SET column=value, column2=value2, ...;

顺便说一句:你是在寻求不逃避价值观的麻烦。mysqli_real_escape_string()切勿将用户提供的内容直接传递给您的查询 - 始终使用或类似的方法进行转义。或者使用 PDO。

于 2013-07-07T12:59:09.367 回答
0

我建议您使用 PHP 框架或 MySQLi 类,其中包含使您的工作流程更快、更容易的函数。

如果您正在寻找 PHP 框架,请花点时间根据您的要求(例如您的项目/应用程序的大小)和您的编程知识进行选择。

Codeigniter是一个很好的入口,因为它易于理解(深入了解源代码)具有较低的学习曲线和完整的文档。

对于 MySQLi 类,我可以推荐https://github.com/ajillion/PHP-MySQLi-Database-Class

于 2013-07-07T13:07:21.363 回答
0

您有一个q17_others不包含在您要插入的值集中的列。

您的列示例如下所示:

... q16, q17, q17_others, q18,  ...

与您的价值观相同的部分:

... '$_POST[q16]', '$_POST[q17]', '$_POST[q18]', ...

另外,我同意 Marcin Orlowski 在回答中所说的一切。这不是将数据插入数据库的安全方法。至少您应该转义输入,但最好使用 PDO 之类的东西和 bindParam 调用。

于 2013-07-07T13:12:14.670 回答