0

以下のmysqlステートメントがあります:

INSERT INTO rates_try (`Weight`, `length`, `height`, `Min`, `100`, `200`, `300`) VALUES (1000,0.1,2.3,1,2,3,4);

エラーが発生します:

行が作成されていません。チェック SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを参照してWeight、 1 行目の「insertquery」付近で使用する正しい構文を確認してlengthください。heightMin100200300

テーブル構造は次のとおりです。

rates_try ( `Weight` int(11), 
            `length` double, 
            `height` double, 
            `Min` double, 
            `100` double, 
            `200` double, 
            `300` double )

構文の何が問題なのかわかりませんが、列が数値であることに関係している可能性が最も高いことはわかっています。これが原因である場合は、名前に何かを追加する必要があるため、単なる数値ではありませんが、最初にそうではないことを確認したかったのです。

ステートメントを作成する PHP コード

$insertquery = "INSERT INTO rates_{$tablename} (`Weight`, `length`, `height`, `Min`";
                foreach ($titles as $title){
                    if (empty($title) ){

                    }else{
                        $insertquery .= ", `" . $title . "`";
                        $counter++;
                    }
                }
                $insertquery .=  ") VALUES (".$row['weight'].",".$row['cbm_min'].",".$row['cbm_max'].",".$value;
                $a = 0;
                while ($a < $counter){
                    $newvalue = $array[$a][$i];
                    if (empty($newvalue)){
                        $newvalue = 0;
                    }
                    $insertquery .= ",". $newvalue;
                    $a++;
                }
                $insertquery .= ");";

                echo $insertquery. "<br/>";
                $queryResult = mysqli_query($con, insertquery);
4

2 に答える 2

0

バッククォートを使用して列名を囲む規則に従っているので、これは興味深いものです。また、チェックしたばかりのドキュメントによると、列名は実際に有効です。

識別子は数字で始めることができますが、引用されていない限り、数字だけで構成することはできません。

Windows の MySQL 識別子は大文字と小文字を区別しませんが、Linux では大文字と小文字が区別されます。どこかで大文字または小文字を見逃していませんか? 最初の列は大文字を使用して開始していますが、他の列は大文字を使用していません。

ただし、バックティックが必要な列名を使用することは、一般的に悪い考えです。参照するたびに、特別なケアを必要としないものを使用してください。

于 2013-09-05T10:14:50.583 に答える