2016-07-19 17 views
0

Ich habe drei verwandte Tabellen "Benutzer", "Kategorie" und "Zinsbereich"; und ich möchte eine Daten aus einem Formular in "Benutzer" Tabelle einfügen, und wählen Sie eine andere Daten aus "Kategorie" -Tabelle und Einfügen in "Zinsbereich" Tabelle mit PHP.Ich möchte eine Daten aus einem Formular in eine Tabelle einfügen, und andere Daten aus einer anderen Tabelle auswählen und in die dritte Tabelle einfügen mit PHP

Der Fehler zeigt es ist:

Error: INSERT INTO users(user_id, first_name, last_name, higher_education, user_name, pass_word) VALUES('' , '87878787' , 'iuiu' , 'iuiu' , 'root' , '');INSERT INTO interest_area (category_id) SELECT category_id FROM category WHERE category_name = 'ASP'; Erreur de syntaxe pr�s de 'INSERT INTO interest_area (category_id) SELECT category_id FROM category ' � la ligne 2

Mein PHP-Code ist:

<?php 
    if (isset($_POST["interest_area"])){    
    $f_name = $_POST["firstname"]; 
    $l_name = $_POST["last_name"]; 
    $h_education = $_POST["higher_education"]; 
    $i_area = $_POST["interest_area"]; 
    $email = $_POST["email"]; 
    $u_name = $_POST["user_name"]; 
    $p_word = $_POST["pass_word"]; 

    $sql = "INSERT INTO users(user_id, first_name, last_name, higher_education, user_name, pass_word) 
    VALUES('' , '$f_name' , '$l_name' , '$h_education' , '$username' , '$password');"; 

    $sql .= "INSERT INTO interest_area (category_id) 
    SELECT category_id FROM category 
    WHERE category_name = '$i_area';"; 

if ($conn->query($sql) === TRUE) { 
echo "New record created successfully";} 
else { echo "Error: " . $sql . "<br>" . $conn->error;} 
} 
?> 
+0

Sie können nicht mehrere Anweisungen in einem einzelnen Abfrageaufruf haben. Es ist ein grundlegender Abwehrmechanismus gegen eine Art von SQL-Injektion. Sie müssen ZWEI $ sql-Variablen haben und 'query()' für jeden einzeln aufrufen. –

+0

Was ist mit 'mysqli_multi_query()' @MarcB? –

Antwort

0

You have to run two mysqli_query for insertion

mysqli_query

Bessere Nutzung vorbereiten Anweisung während Einfügen von Daten

prepare statement

 $f_name = $_POST["firstname"]; 
     $l_name = $_POST["last_name"]; 
     $h_education = $_POST["higher_education"]; 
     $i_area = $_POST["interest_area"]; 
     $email = $_POST["email"]; 
     $u_name = $_POST["user_name"]; 
     $p_word = $_POST["pass_word"]; 
     $user_id = $_POST["user_id"]; 

$user_id should not be blank if it ur primary key then data cann't be inserted;

$sql1 = "INSERT INTO users(user_id, first_name, last_name, higher_education, user_name, pass_word) 
     VALUES('$user_id' , '$f_name' , '$l_name' , '$h_education' , '$u_name' , '$p_word')"; 

$sql2 = "INSERT INTO interest_area (category_id) 
    SELECT category_id FROM category WHERE category_name = '$i_area'"; 

mysqli_query($con,$sql1); 
mysqli_query($con,$sql2) 
mysqli_close($con); 
0

Sie müssen lediglich Ihre zwei INSERT-Anweisungen als separate $ conn-> query Anrufe laufen anstatt sie zu einem einzigen Aufruf zusammenzufassen.

0

der Syntaxfehler hier:

$sql .= "INSERT INTO interest_area (category_id) 
SELECT category_id FROM category 
WHERE category_name = '$i_area';"; 

in geschweiften ...

$sql .= "INSERT INTO interest_area (category_id) 
SELECT category_id FROM category 
WHERE category_name = {$i_area};"; 

Und zwei separate Abfragen wie angegeben sein sollte ...

+0

Outright ** FALSCH **. Mit der String-Syntax von OP ist nichts falsch. Das ist absolut valide PHP –

+0

Sorry ... unser Shop verwendet lockiges für mehr Klarheit ... einfaches Zitat ist gültig ... – Tim

+0

das Entfernen der Anführungszeichen wird es nur eine nackte Zeichenkette machen, und wahrscheinlich auch einen Syntaxfehler. –

0

Sie multi_query für mehrere Abfragen verwenden müssen.

$sql = "INSERT INTO users(user_id, first_name, last_name, higher_education,  user_name, pass_word)VALUES('' , '$f_name' , '$l_name' , '$h_education' , '$username' , '$password');"; 

$sql .= "INSERT INTO interest_area (category_id) 
    SELECT category_id FROM category WHERE category_name = '$i_area'"; 

mysqli_multi_query($con,$sql); 
mysqli_close($con); 
+0

Stellen Sie sicher, dass Sie das Syntaxrecht haben - jede Abfrage benötigt ein eigenes Semikolon in der SQL-Anweisung. –

+0

oops, schöner Fang. –

Verwandte Themen