2016-04-26 11 views
1

Ich fange gerade an, über phpMyAdmin und mysql zu lernen. Hier ist eine Frage: Ich möchte etwas in meiner "Schüler" -Tabelle auswählen und das Ergebnis wiedergeben. aber als ich überprüft habe, gibt es 0 Zeilen für die Suche zurück. aber ich habe es in meiner Datenbank. hier ist mein Code:Wählen Sie ein Attribut in mysql, php

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

    $params="@name varchar(30)"; 
    $paramslist="@name='$name%"; 

    $sql = "SELECT name,address,city,birthday FROM student WHERE [email protected]"; 

    $dbsql = "EXEC sp_executesql 
     N'$sql', 
     N'$params', 
     $paramslist"; 

    $result = $conn->query($sql); 
    ECHO $result->num_rows; 

Ich weiß nicht, was das Problem ist. danke für die Hilfe.

+2

Dies ist eine sehr seltsame Art und Weise Ihre Anfrage auszuführen. Warum verwenden Sie eine Prozedur, wenn [vorbereitete Anweisungen] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und ['bind_param'] (http://php.net/manual /en/mysqli-stmt.bind-param.php) tun Sie das alles viel einfacher? Ich denke, trotz all dieser Probleme haben Sie immer noch einen SQL-Injection-Fehler, da '$ name' nicht korrekt maskiert ist. – tadman

+1

sind keine Groß- und Kleinschreibung? Sie verwenden 'name' und' NAME' – RST

+0

Warum nicht die Methoden befolgen, die in (modernen) Lehrbüchern und Tutorials beschrieben sind? – Strawberry

Antwort

0
$sql = "SELECT name,address,city,birthday FROM student WHERE name=".$name; 
$result = $conn->query($sql); 
echo $result->num_rows(); 
0

das ist, was für mich mit vorbereiteter Aussage arbeitet

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

// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$name='Veshraj Joshi'; 
$stmt = $conn->prepare("SELECT name,address,city,birthday FROM student WHERE NAME=?"); 

/* bind parameters for markers */ 
$stmt->bind_param("s", $name); 

/* execute query */ 
$stmt->execute(); 

$result = $stmt->get_result(); 

/* now you can fetch the results into an array */ 
while ($student = $result->fetch_assoc()) { 

    // use your $student array as you would with any other fetch 
    echo $student['address'].'<br>'; 
} 
+0

lassen Sie mich wissen, ob es für Sie funktioniert oder nicht .... –

0

für folgende Verwendungszwecke Aussagen vorbereitet. Sie sollten vorbereitete Anweisungen immer verwenden, wenn Sie Benutzereingaben zum Schutz vor SQL Injection-Angriffen einschließen.

Jedes Mal fetch() ausgeführt wird, werden die Ergebnisse auf die von bind_result() angegebenen Variablen gebunden

$conn = new mysqli($servername, $username, $password, $dbname); 
$query = "SELECT name,address,city,birthday FROM student WHERE name=?"; 
$stmt = $conn->prepare($query); 
$searchTerm = "%$name%"; 
$stmt->bind_param('s', $searchTerm); 
$stmt->execute(); 
$stmt->bind_result($resultName, $resultAddress, $resultCity, $resultBirthday); 
while($stmt->fetch()) 
{ 
    echo $resultName . " " . $resultAddress . " " . $resultCity . "<br/>"; 
}