2016-11-16 4 views
0

Ich habe eine funktionierende INSERT-Anweisung, die es einem Besucher ermöglicht, ein Konto auf meiner Website zu erstellen.SELECT-Anweisung verursacht Aufruf an eine Memberfunktion bind_param() on boolean für eine Arbeitsanweisung

Ich versuche, eine SELECT-Anweisung zu erstellen, um zu überprüfen, ob der Benutzername, mit dem sie sich gerade anmeldet, existiert. Aus irgendeinem Grund, wenn die SELECT-Anweisung ausgeführt wird, bekomme ich eine Call to a member function bind_param() on boolean auf die INSERT-Anweisung (Zeile 29).

Warum ist das? Ich habe meinen Code zur Verfügung gestellt ...

<?php 
    require '../manager-session.php'; 
    require '../../db-config.php'; 
    require '../../distributor-config.php'; 

    $role = 'User'; 
    $title = $_POST['title']; 
    $firstname = $_POST['firstname']; 
    $surname = $_POST['surname']; 
    $company = $_SESSION['userinfo']['company']; 
    $emailaddress = $_POST['emailaddress']; 
    $telephone = $_POST['telephone']; 
    $addressline1 = $_POST['addressline1']; 
    $addressline2 = $_POST['addressline2']; 
    $addressline3 = $_POST['addressline3']; 
    $towncity = $_POST['towncity']; 
    $county = $_POST['county']; 
    $postcode = $_POST['postcode']; 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    $stmt_check = "SELECT username FROM users WHERE username = ?"; 
    $stmt_check = $conn->prepare($stmt_check); 
    $stmt_check->bind_param('s', $_POST['username']); 
    $stmt_check->execute(); 

    if($stmt_check == true) { 
     $stmt = $conn->prepare("INSERT INTO users (role, distributor, company, title, firstname, surname, emailaddress, telephone, addressline1, addressline2, addressline3, towncity, county, postcode, username, password) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); 
     $stmt->bind_param("ssssssssssssssss", $role, $distributor, $company, $title, $firstname, $surname, $emailaddress, $telephone, $addressline1, $addressline2, $addressline3, $towncity, $county, $postcode, $username, $password); 
     $stmt->execute(); 

     $to = "". $emailaddress .""; 
     $subject = "New User Account"; 
     $txt = "". $firstname ." ". $surname ." has created a new User account for ". $distributor .". Please login using the following details:\n\nUsername: ". $username ."\nPassword: ". $password .""; 
     $headers = "From: [email protected]" . "\r\n" . "BCC: [email protected], [email protected] ". $distributoremail .""; 
     mail($to, $subject, $txt, $headers); 

     header('location: ../add-a-new-user.php?page=add-a-new-user&status=success'); 
     exit(); 
    } 

    else { 
     header('location: ../add-a-new-user.php?page=add-a-new-user&status=error'); 
     exit(); 
    } 

    $stmt->close(); 
    $conn->close(); 
?> 

Antwort

0

mysqli->prepare gibt false zurück, wenn die vorbereitete Anweisung fehlschlägt. Dies kann auf einen SQL-Syntaxfehler oder einen anderen SQL-Fehler zurückzuführen sein.

Edit: Sie können anscheinend eine vorbereitete Erklärung Fehler wie diese:

$stmt = $conn->stmt_init(); 
$stmt->prepare("..."); 
var_dump($stmt->error); 
+0

I string (0) "get"? –

+0

Oh, ich sehe, dass Sie vergessen haben, Ihre Aussage zu schließen. Rufe immer mysqli_stmt-> close(); nachdem Sie Ihre Daten abgerufen haben, weil mehrere Anweisungen nicht gleichzeitig aufgerufen werden können: '$ stmt_check-> close();' und '$ stmt-> close();'. Es ist seltsam, dass es keine Fehlermeldung gibt. – JensV

Verwandte Themen