2016-04-13 5 views
0

Der Versuch, nur etwas einrichten, dass username = Passwort zu bestätigen, über num_rows = 1.Prepared Statements auswählen mit Variablen - php

Der Versuch vorbereitete Anweisungen zu verwenden, das ich noch nie zuvor verwendet haben, und ich bin etwas fehlt. Woher kommt die Variable in bind_results ('s', $ variable)?

Auch, es funktioniert einfach nicht für mich.

<?php 

require ($_SERVER['DOCUMENT_ROOT'].'/db-connect.php'); 

$conn = new mysqli($servername, $username, $password, $dbname); 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$user = $_POST['username']; 
//$user = $mysqli->real_escape_string($user);// 
$password = $_POST['password']; 
//$password = $mysqli->real_escape_string($password);// 

if ($stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?")) { 

    $stmt->bind_result('ss', $username); 

    $stmt->execute(); 
    $result = $stmt->num_rows; 

    echo $result; 

    $stmt->close(); 
} 

$mysqli->close(); 

?> 
+0

Hallo! Verwenden Sie in der Funktion bind_result keine fest codierte Zeichenfolge. Verwenden Sie immer Variablen. In Ihrem Fall: $ sString = "ss"; $ stmt-> bind_result ($ sString, $ username); –

+0

Okay, danke, das werde ich tun. Irgendwelche anderen Vorschläge, damit dies funktioniert? –

+0

Sie können diesen Link überprüfen, Sie haben viele Antworten auf Ihre Frage http://StackOverflow.com/Questions/18753262/Beispiel-von-How-to-use-bind-result-vs-get-result –

Antwort

0

Ich sehe drei Probleme:

$stmt->bind_result('ss', $username); 

Zuerst bind_resultPHP documentation: "Wird Spalten im Ergebnis zu Variablen"

Ich denke, Sie suchen nach bind_param. PHP documentation:

"Binden Sie Variablen für die Parametermarken in der SQL-Anweisung, die an mysqli_prepare() übergeben wurde."

Zweitens Ihre Aussage hat zwei Parametermarken (?), Ihre bind Anweisung gibt zwei Strings (ss), aber Sie bieten nur eine Variable ($username).

Drittens ist $username nicht, was Sie von $_POST['username'] erhalten. Sie haben das $user zugewiesen. $username ist für Ihre Datenbankverbindung.

ich denke, es sollte stattdessen mit dieser Linie für Sie arbeiten:

$stmt->bind_param('ss', $user, $password); 
+0

Danke, ich dachte, dass die Bind-Funktion etwas an eine neue Variable bindet, deshalb hatte ich dort eine andere! Verwirrt mit den vorbereiteten Aussagen. –

+0

Ich würde vorschlagen, einige Beispiele in der PHP-Dokumentation durchzugehen, die ich verlinkt habe. Sie können hilfreich sein, um zu sehen, wie es funktioniert, wenn Sie anfangen. Obwohl, um ganz ehrlich zu sein, was ich wirklich vorschlagen würde, ist eher pdo als mysqli zu verwenden, weil ich denke, dass es einfacher ist, mit vorbereiteten Aussagen zu arbeiten. Nur meine Meinung. –

Verwandte Themen