2013-04-13 3 views
0

Je reçois cette erreur: SQLSTATE [42000]: erreur de syntaxe ou violation d'accès: 1064 Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser à proximité 'INSERT INTO student_details (student_id, prenom, last_name, DOB, address_lin' à la ligne 2erreur de syntaxe, violation d'accès pdo

pour ce code: une idée

//create variables from each value that was submitted from the form */ 
$student_info_id = $_POST['student_info_id']; 
$class_id = $_POST['class_id']; 
$first_name = $_POST['first_name']; 
$last_name = $_POST['last_name']; 
$dob = $_POST['dob']; 
$address_line_1 = $_POST['address_line_1']; 
$address_line_2 = $_POST['address_line_2']; 
$town = $_POST['town']; 
$county = $_POST['county']; 
$postcode = $_POST['postcode']; 
$gender = $_POST['gender']; 
$ethnicity = $_POST['ethnicity']; 


try { 
$conn = new PDO("mysql:host=$host; dbname=$dbname", $user, $password); 
$conn->exec("SET CHARACTER SET utf8");  // Sets encoding UTF-8 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$sql = " 
     INSERT INTO student_info (student_info_id, class_id) VALUES (:student_info_id, :class_id) 
     INSERT INTO student_details (student_id, first_name, last_name, dob, address_line_1, address_line_2, town, county, postcode, gender, ethnicity, student_info_id) 
             VALUES (:student_id, :first_name, :last_name, :dob, :address_line_1, :address_line_2, :town, :county, :postcode, :gender, :ethnicity, :student_info_id)  

     "; 

$statement = $conn->prepare($sql); 
$statement->bindValue(":student_info_id", $student_info_id); 
$statement->bindValue(":class_id", $class_id); 
$statement->bindValue(":student_id", $student_id); 
$statement->bindValue(":first_name", $first_name); 
$statement->bindValue(":last_name", $last_name); 
$statement->bindValue(":dob", $dob); 
$statement->bindValue(":address_line_1", $address_line_2); 
$statement->bindValue(":address_line_2", $address_line_1); 
$statement->bindValue(":town", $town); 
$statement->bindValue(":county", $county); 
$statement->bindValue(":postcode", $postcode); 
$statement->bindValue(":gender", $gender); 
$statement->bindValue(":ethnicity", $ethnicity); 
$statement->bindValue(":student_info_id", $student_info_id); 

$count = $statement->execute(); 

    $conn = null;  // Disconnect 
} 
catch(PDOException $e) { 
    echo $e->getMessage(); 
} 
+2

Vous devez utiliser des points-virgules (';') pour séparer plusieurs requêtes. Je ne sais pas si c'est le problème, ici, cependant. –

+0

@navnav oui c'était :) – BlueDolphin

Répondre

0

Je ne suis pas sûr si PDO en charge plusieurs déclarations, mais si oui, l'erreur est que vous ne l'avez pas fin à la première déclaration,

INSERT INTO student_info (student_info_id, class_id) 
VALUES (:student_info_id, :class_id); 
            ^add this one 
+0

IT a travaillé THANX :) – BlueDolphin

0

vous devez terminer la première INSERT avec un ; comme ceci:.

INSERT INTO student_info (
    student_info_id, 
    class_id 
) VALUES (
    :student_info_id, 
    :class_id 
); <-- a semicolon is the default statement separator, use it 
.... 

Notez que, bien qu'il soit possible d'exécuter plusieurs requêtes en même temps, je ne vous conseille de le faire si vous exécuterait chaque requête sur e par un, vous auriez un meilleur contrôle sur les erreurs.

+0

yh ... votre droite – BlueDolphin

-1

Vous ne pouvez pas exécuter plusieurs requêtes en un seul appel.
Exécutez-les séparément, un par un.

+0

vous pouvez .... je viens de le faire. – BlueDolphin

+0

@BlueDolphin Oui, vous pouvez le faire – hek2mgl

Questions connexes