2016-08-05 33 views
1

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 ; 
} 
+0

'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()'. –

Antwort

0

einfach definieren das Array und Verwendung es zum Beispiel in Ihrem Code:

$stmt = $db->prepare("SELECT * 
    FROM `class` 
    WHERE `userid` = ? 
    AND `classid` = ?"); 

$stmt->bind_param("ss", $userid, $classid); 

$stmt->execute(); 

$result=$stmt->get_result(); 
$row= array(); 
$i=0; 
     while ($data = $result->fetch_assoc()) 
     { 
       $row[$i]['name']=$data['name']; 
       $i++; 
     } 
echo $row; 
+0

Vielen Dank, aber mit diesem Code bekomme ich: 'Fatal error: Aufruf an undefinierte Methode mysqli_stmt :: get_result()' – Rob