PHP - 插入数据库不起作用

时间:2015-11-19 17:10:04

标签: php mysql xampp

当我尝试执行新插入时,收到以下错误:

  

Verbindung fehlgeschlagen:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在第4行的“加入Strek on pk_fk_Strecke = pk_Strecke”附近使用正确的语法

到目前为止,这是我的php文件:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title> PHP F1 - Datenbank</title>
    <style>
        button {
            margin:5px;
            margin-left:-0px;
        }
        .insert {
            position:relative;
            margin:0px;
            margin-bottom:5px;
            margin-top:-25px;
        }
    </style>
</head>
<body>
<h2> Insert Dokument für deine Datens&auml;tze ! </h2>
<form action="F1_PHP.php" method="post">
    <input type="text" name="jahr" placeholder="2015-11-21"> <br><br>
    <input type="text" name="sieger" placeholder="Sieger"> <br><br>
    <input type="text" name="schnellster" placeholder="1:32:301"> <br><br>
    <input type="text" name="strecke" placeholder="Strecke"><br><br>
    <input type="submit" name="formdaten" class="insert" value="Insert">  <br>
</form>
<?php
//phpinfo();
/***
 * This document contains a demonstration for accessing a
 * MySQL Demo Database via PDO and OOP
 * we connect to MySQL but its easy to exchange the underlying
 * database (e.g. to Oracle) without having to alter the PHP code.
 *
 * Database:    MySQL on localhost (XAMPP)
 * Codebase:    PHP OOP
 */

// We use PDO to do a database connection and require the functionality

try {

    $server   = 'mysql:dbname=f1;host=localhost';
    $user     = 'root';
    $password = '';
    $options  = array
            (
              PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
            );
    $pdo      = new PDO($server, $user, $password, $options);

    // because we have default errormode_silent we change to ERRMODE_EXCEPTION

    $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    if(isset($_POST["formdaten"])) {
        $jahr = $_POST["jahr"];
        $sieger = $_POST["sieger"];
        $schnellster = $_POST["schnellster"];
        $strecke = $_POST["strecke"];

        $eintrag = $pdo->prepare("INSERT INTO Rennen
    (pk_jahr, sieger, SchnellsteRunde, pk_fk_strecke)
    VALUES
    (?, ?, ?, ?) join Strecke on pk_fk_Strecke = pk_Strecke");

        $eintrag ->execute(array($jahr,$sieger, $schnellster, $strecke));

        if($eintrag == true) {
            echo "Eintrag war erfolgreich";
        } else {
            echo "Fehler";
        }
    }


    } 
catch (PDOException $error) {
    echo 'Verbindung fehlgeschlagen: ' . $error->getMessage();
    //print_r($error);
}

?>

</body>


<table border="1">
<tr>
   <th> </th>
   <th> Jahr               </th>
   <th> Sieger             </th>
   <th> Schnellste Runde   </th>
   <th> Strecke            </th>
</tr>
 <?php
 try {
   $query= 'SELECT pk_Jahr,Sieger,SchnellsteRunde,pk_fk_Strecke
                 FROM Rennen join Strecke on pk_fk_Strecke = pk_Strecke
                   order by pk_Jahr';
   $stmt   = $pdo -> query($query);
    while( $row = $stmt->fetch(PDO::FETCH_ASSOC) )
      {
       echo '<tr>';
         echo ' <td>'."<input type='radio' name='markiert'>".'</td>'; 
         echo ' <td>'. $row["pk_Jahr"].'</td>';
         echo ' <td>'.   $row["Sieger"]. '</td>';
         echo ' <td>'.   $row["SchnellsteRunde"]. '</td>';
         echo ' <td>'.   $row["pk_fk_Strecke"]. '</td>';
       echo '</tr>';
       }
    echo '</table>';
} 
catch (PDOException $error) {
    echo 'Fehler beim Lesen der Daten ' . $error->getMessage();
}   
?> 
<input type="submit" name="delete" value="Delete">
<input type="submit" name="update" value="Update">
</html>

我在一个网站上看到它会像这样工作,但在我的情况下,它会抛出一个例外,我不知道为什么。

我的数据库看起来像这样

create table Sponsoren( 
    pk_Firma    varchar(100) primary key, 
    Ausgaben    decimal(10,2), 
    Firmensitz  varchar(100), 
    Kontakt     varchar(100)
); 

create table Strecke(
    pk_Strecke  varchar(100) primary key, 
    Land        varchar(100), 
    Stadt       varchar(100), 
    Laenge      varchar(30)
);

create table Rennen( 
    pk_Jahr         date,  
    pk_fk_Strecke   varchar(100), 
    SchnellsteRunde varchar(100),  
    Sieger          varchar(100),

    primary key(pk_Jahr,pk_fk_Strecke),
    constraint RennenStrecke foreign key(pk_fk_Strecke) references Strecke(pk_Strecke)
); 

create table Schmierstoffe ( 
    pk_SSName       varchar(100) primary key, 
    ersterEinsatz   date, 
    letzterEinsatz  date, 
    Rennteilnahmen  int, 
    Siege           int, 
    Podeste         int, 
    Punkte          decimal(12,2) 
);

create table Reifenhersteller ( 
    pk_RHName    varchar(100) primary key, 
    Luftdruck    decimal(10,2), 
    AnzahlRennen int, 
    Siege        int
); 

create table Motorenhersteller ( 
    pk_MHName       varchar(100) primary key, 
    Nation          varchar(100), 
    Motorname       varchar(100),
    istAktiv        boolean, 
    letztesRennen   date, 
    erstesRennen    date
);


create table Manufaktur ( 
    pk_MFName   varchar(100) primary key, 
    Strasse     varchar(100), 
    Ort         varchar(100), 
    PLZ         varchar(100), 
    TelNr       varchar(100), 
    Email       varchar(100), 
    FaxNr       varchar(100) 
); 


create table Hersteller ( 
    pk_HSName       varchar(100) primary key, 
    fk_MFName       varchar(100),
    istAktiv        boolean, 
    AnzahlRennen    int, 
    letztesRennen   date, 
    erstesRennen    date,

    constraint HersMF foreign key(fk_MFName) references Manufaktur(pk_MFName)
); 


create table Team ( 
    pk_Teamname     varchar(100) primary key, 
    fk_RHName       varchar(100), 
    fk_MHName       varchar(100), 
    fk_HSName       varchar(100),
    istAktiv        boolean, 
    erstesRennen    date, 
    letzesRennen    date, 

    constraint RH foreign key(fk_RHName) references Reifenhersteller(pk_RHName),
    constraint MH foreign key(fk_MHName) references Motorenhersteller(pk_MHName),
    constraint HS foreign key(fk_HSName) references Hersteller(pk_HSName)
); 

create table Fahrer( 
    pk_FahrerNr     int primary key, 
    Nation          varchar(100),
    Vorname         varchar(100), 
    Nachname        varchar(100), 
    fk_Teamname     varchar(100),  
    GebDatum        date, 
    Einsätze        int, 
    Siege           int,

    constraint Team foreign key(fk_Teamname) references Team(pk_Teamname)
); 


create table Rekorde ( 
    pk_Beschreibung varchar(100), 
    fk_FahrerNr     int,  
    Jahr            date,  
    fk_Strecke      varchar(100),

    constraint ST foreign key(fk_Strecke) references Strecke(pk_Strecke)
); 

create table Rennen_hat_Fahrer ( 
    pk_Jahr                 date, 
    pk_fk_FahrerNr          int, 
    pk_fk_Strecke           varchar(100), 
    Endplatzierung          int, 
    Qualifingplatzierung    int, 
    Qualizeit               varchar(100), 
    Strafversetzung         varchar(10),

    primary key(pk_Jahr, pk_fk_FahrerNr,pk_fk_Strecke),
    constraint RF foreign key(pk_fk_FahrerNr) references Fahrer(pk_FahrerNr),
    constraint RS foreign key(pk_fk_Strecke) references Strecke(pk_Strecke)
);

create table Rennen_hat_Sponsoren ( 
    pk_fk_Jahr      date, 
    pk_fk_Firma     varchar(100),

    primary key(pk_fk_Jahr,pk_fk_Firma),
    constraint RSJ foreign key(pk_fk_Jahr) references Rennen(pk_Jahr),
    constraint RSF foreign key(pk_fk_Firma) references Sponsoren(pk_Firma)
); 

create table Manufaktur_hat_Schmierstoffe ( 
    pk_fk_MFName    varchar(100), 
    pk_fk_SSName    varchar(100),

    primary key(pk_fk_MFName, pk_fk_SSName),
    constraint MSM foreign key(pk_fk_MFName) references Manufaktur(pk_MFName),
    constraint MSS foreign key(pk_fk_SSName) references Schmierstoffe(pk_SSName)
); 

0 个答案:

没有答案