-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

You've got a q17_others column that isn't include in the set of values that you are inserting.

A sample of your columns looks like this:

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

And the same section from your values:

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

Also, I would agree with everything Marcin Orlowski said in his answer. This is not a safe way to insert data into your database. At the very least you should be escaping the input, but it would be preferable to use something like PDO and with bindParam calls.

于 2013-07-07T13:12:14.670 に答える
0

ワークフローを高速化し、主に簡単にする関数を含む PHP フレームワークまたは MySQLi クラスを使用することをお勧めします。

PHP フレームワークを探す場合は、時間をかけて要件 (プロジェクトやアプリのサイズなど) とプログラミングの知識に応じて選択してください。

Codeigniterは理解しやすく (ソースに飛び込む)、学習曲線が短く、ドキュメントが充実しているため、適切なエントリになります。

MySQLi クラスについては、https://github.com/ajillion/PHP-MySQLi-Database-Classをお勧めします。

于 2013-07-07T13:07:21.363 に答える