Ich habe ein paar verwandte Fragen dazu gelesen, aber in jedem Fall konnte ich ihren Code nicht in meinem Kontext verwenden.Verwenden vorbereiteter MySQLi-Anweisungen zum Erzeugen eines assoziativen Arrays
Nach einigen Injektionsversuchen versuche ich, vorbereitete Anweisungen in meine Site zu implementieren, während ich so wenig Code wie möglich ändere. Wichtig ist, dass die Antworten auf meine SELECT
Abfragen als assoziative Felder ausgegeben werden sollen: z. $row['name']
. Hier
ist ein Beispiel für Code, den ich gerade jetzt (ohne vorgefertigte Aussage):
// Create connection
$db = new mysqli('localhost', 'username', 'password', 'seatingplan');
if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
}
// Get class name
$sql = <<<SQL
SELECT *
FROM `class`
WHERE `userid` = '$userid'
AND `classid` = '$classid'
SQL;
if(!$result = $db->query($sql)){
die('There was an error running the query [' . $db->error . ']');
}
while($row = $result->fetch_assoc()){
$classname = $row['classname'] ;
}
Gibt es eine einfache Möglichkeit, dies für vorbereitete Anweisungen anzupassen? Basierend auf andere Fragen, dann ist dies so weit ich habe (aber es funktioniert nicht - es gibt nur 1 für jede Zeile, anstatt die tatsächliche Variable):
$stmt = $db->prepare("SELECT *
FROM `class`
WHERE `userid` = ?
AND `classid` = ?");
$stmt->bind_param("ss", $userid, $classid);
$result = $stmt->execute();
$stmt->store_result();
while($data = $stmt->fetch()){
echo $data ;
}
'echo $ Daten;' Es gibt kein Array. Siehe das Handbuch zu 'fetch()' http://php.net/manual/en/mysqli-stmt.fetch.php und wählte nicht die Zeilen aus, die du echoten willst. Sie müssen das Ergebnis auch binden. 'bind_result()'. –