2016-08-16 3 views
0

Ich befolge zurzeit W3Schools Tutorial mit vorbereiteten SQL-Anweisungen, wenn ich versuche, Daten in die Datenbank einzufügen, sagt $ Vorname = "Nathan" und $ lastname = "Kent" ist eine ungenutzte lokale Variable? Es gibt auch keinen Fehler zurück, so dass es eine Verbindung herstellt und wenn ich die Datenbank überprüfe, hat es keine neuen Einträge.Vorbereitete SQL-Anweisungen INSERT

+0

Wo sind '$ Vorname' und' $ Nachname' definiert? – Script47

+2

Ich bin nicht positiv, aber ich bin ziemlich sicher, dass Sie sie vor dem Binden setzen müssen; und da ist das Problem von '$ ** sur ** name' vs' $ ** last ** name'. – Uueerdo

+0

@Uueerdo Ich habe das korrigiert, das war eine Last-Minute-Änderung;) – Nathan

Antwort

0

Mit MYSQLI müssen Sie tatsächlich nach Fehlern suchen, anstatt anzunehmen, dass sie bei Ihnen schreien.

function setData(){ 
    global $servername; 
    global $username; 
    global $password; 
    global $dbname; 

    $conn = new mysqli($servername, $username, $password, $dbname); 

    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } else{ 
     echo "Connection Successful" . "<br>"; 
    } 
    $stmt = $conn->prepare("INSERT INTO test(firstname, surname) VALUES (?,?)"); 

    // add error check 
    if ($stmt === false) { 
     echo $conn->error; 
     exit; 
    } 

    // Its not necessary to load the variables before the `bind_param` 
    // but as you dont actually have these variables yet you do 
    $firstname = "James"; 
    $lastname = "Williams"; 

    $stmt->bind_param("ss", $firstname, $surname); 

    $status = $stmt->execute(); 

    // add error check 
    if ($status === false) { 
     echo $conn->error; 
     exit; 
    } 


    echo "New Records Created"; 

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

} 

Sie könnten diese reinigen ein wenig auch, indem in den Mainline-Code in die Datenbank verbinden und die Verbindung param auf die Funktion sowie die Datenparameter

vorbei
function setData($conn, $firstname, $lastname){ 

    $stmt = $conn->prepare("INSERT INTO test(firstname, surname) VALUES (?,?)"); 

    // add error check 
    if ($stmt === false) { 
     echo $conn->error; 
     exit; 
    } 

    $stmt->bind_param("ss", $firstname, $surname); 

    $status = $stmt->execute(); 

    // add error check 
    if ($status === false) { 
     echo $conn->error; 
     exit; 
    } 

    return "New Records Created"; 

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

} 


$servername = '127.0.0.1'; 
$username = 'root'; 
$password = 'veryStRongPassPhrASe'; 
$dbname  = 'mydatabase'; 

$conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} else{ 
    echo "Connection Successful" . "<br>"; 
} 


$msg = setData($conn, 'Fred', 'Bloggs'); 
echo $msg; 
+0

Anstelle von echo $ conn-> error; exit; 'warum nicht einfach' exit ($ conn-> error); '? – Script47

+0

@ Script47 Sie sagen Kartoffel ich sage Kartoffel. Eigentlich funktioniert das nicht schriftlich. hahhaa – RiggsFolly

+0

Super! Ich werde das in der Zukunft verwenden, ich habe es herausgefunden, weil ich globale Variablen in meiner Funktion verwendet habe, also müssen die anderen Werte im selben Umfang sein. Ist eine globale Variable die richtige Methode zum Abrufen von dbconfig-Details? Ich habe die dbconfig Details in einer anderen .php Datei und schließe sie dann ein. – Nathan

0

Sie definieren nicht ein Wert für $surname:

$stmt->bind_param("ss", $firstname, $surname); 

$firstname = "James"; 
$lastname = "Williams"; 
$stmt->execute(); 

ändern $lastname zu $surname