0

このPHP / MySQLが機能しない理由について、誰かが光を当てることができますか? 基本的に、フォームから一度に大量の行を挿入する必要があるため、複数の名前フィールド、複数の短い、中、長いフィールドなどがあります。次のエラーが発生します。

Notice: Undefined variable: Short1 in C:\xampp\htdocs\process.php on line 95
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Long, VLong, Extreme, LJump, HJump, Shotputt, Discuss, Javelin, Date, Year) VAL' at line 2

ここに私のPHPがあります

<?php


$host = "localhost";
$databasename = "pe_results";
$databaseusername = "root";
$databasepassword = "";

$conn = mysql_connect("$host", "$databaseusername", "$databasepassword"); 
mysql_select_db("$databasename", $conn); 

        if (isset($_POST['Name1'])) { 
        $Name1 = $_POST['Name1'];
        }
        if (isset($_POST['Short1'])) { 
        $Short1 = $_POST['Short1'];
        }
        if (isset($_POST['Med1'])) { 
        $Med1 = $_POST['Med1'];
        }
        if (isset($_POST['Long1'])) { 
        $Long1 = $_POST['Long1'];
        }
        if (isset($_POST['VLong1'])) { 
        $VLong1 = $_POST['VLong1'];
        }
        if (isset($_POST['Extreme1'])) { 
        $Extreme1 = $_POST['Extreme1'];
        }
        if (isset($_POST['LJump1'])) { 
        $LJump1 = $_POST['LJump1'];
        }
        if (isset($_POST['HJump1'])) { 
        $HJump1 = $_POST['HJump1'];
        }
        if (isset($_POST['Shotputt1'])) { 
        $Shotputt1 = $_POST['Shotputt1'];
        }
        if (isset($_POST['Discuss1'])) { 
        $Discuss1 = $_POST['Discuss1'];
        }
        if (isset($_POST['Javelin1'])) { 
        $Javelin1 = $_POST['Javelin1'];
        }
        if (isset($_POST['Date'])) { 
        $Date = $_POST['Date'];
        }
        if (isset($_POST['Year'])) { 
        $Year = $_POST['Year'];
        }
        // Sector 2 */
            if (isset($_POST['Name2'])) { 
        $Name2 = $_POST['Name2'];
        }
        if (isset($_POST['Short2'])) { 
        $Short2 = $_POST['Short2'];
        }
        if (isset($_POST['Med2'])) { 
        $Med2 = $_POST['Med2'];
        }
        if (isset($_POST['Long2'])) { 
        $Long2 = $_POST['Long2'];
        }
        if (isset($_POST['VLong2'])) { 
        $VLong2 = $_POST['VLong2'];
        }
        if (isset($_POST['Extreme2'])) { 
        $Extreme2 = $_POST['Extreme2'];
        }
        if (isset($_POST['LJump2'])) { 
        $LJump2 = $_POST['LJump2'];
        }
        if (isset($_POST['HJump2'])) { 
        $HJump2 = $_POST['HJump2'];
        }
        if (isset($_POST['Shotputt2'])) { 
        $Shotputt2 = $_POST['Shotputt2'];
        }
        if (isset($_POST['Discuss2'])) { 
        $Discuss2 = $_POST['Discuss2'];
        }
        if (isset($_POST['Javelin2'])) { 
        $Javelin2 = $_POST['Javelin2'];
        }
        if (isset($_POST['Date'])) { 
        $Date = $_POST['Date'];
        }
        if (isset($_POST['Year'])) { 
        $Year = $_POST['Year'];
        }

        $sql="INSERT INTO results_main
  (Name, Short, Med, Long, VLong, Extreme, LJump, HJump, Shotputt, Discuss, Javelin, Date, Year)
VALUES
  ('$Name1', '$Short1', '$Med1', '$Long1', '$VLong1', '$Extreme1', '$LJump1', '$HJump1', '$Shotputt1', '$Discuss1', '$Javelin1', '$Date', '$Year'),
  ('$Name2', '$Short2', '$Med2', '$Long2', '$VLong2', '$Extreme2', '$LJump2', '$HJump2', '$Shotputt2', '$Discuss2', '$Javelin2', '$Date', '$Year');
";

$result = mysql_query($sql) or die(mysql_error());

// close connection 
mysql_close($conn);

?>

JW の新しいエラー メッセージ

Notice: Undefined variable: Short1 in C:\xampp\htdocs\process.php on line 95
INSERT INTO results_main (`Name`, `Short`, `Med`, `Long`, `VLong`, `Extreme`, `LJump`, `HJump`, `Shotputt`, `Discuss`, `Javelin`, `Date`, `Year`) VALUES (`1`, ``, `1`, `1`, `1`, `1`, `1`, `1`, `1`, `1`, `1`, `2013-04-26`, `10`), (`2`, `2`, `2`, `2`, `2`, `2`, `2`, `2`, `2`, `2`, `2`, `2013-04-26`, `10`); Unknown column '1' in 'field list'
4

3 に答える 3

3

LONGは予約済みのキーワードで、たまたま列の名前になっています。構文エラーを避けるために、列名はバッククォートでエスケープする必要があります。

INSERT INTO results_main(Name, Short, Med, `Long`, VLong, ...) VALUES (....)

列を変更する権限がある場合は、名前を予約されていないキーワードに変更して、後で問題が発生しないようにしてください。


補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-04-15T13:02:42.640 に答える
0

投稿配列を確認してください。$_POST['Short1']; に何か問題があります。

また、MYSQL の予約済みキーワードも使用しないでください。Long は予約済みのキーワードです。使用する場合は、エスケープする必要があります

`Long`
于 2013-04-15T13:02:46.667 に答える