2016-08-05 99 views
1

我已經閱讀了一些相關的問題,但在每種情況下,我都無法讓他們的代碼在我的上下文中工作。使用準備好的MySQLi語句生成關聯數組

在進行了一些注入嘗試之後,我試圖在我的站點中實現準備好的語句,同時儘可能少地更改代碼。重要的是,我希望通過輸出爲關聯數組來響應我的SELECT查詢。 $row['name']

這裏是我現在所擁有的(預先製備無語句)代碼的例子:

// 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'] ; 
} 

有沒有適應這個準備語句的簡單方法?基於其他問題,這是據我已經得到了(但它不工作 - 只爲每一行返回1,而不是實際的變量):

$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 $ data;'沒有數組。請參閱'fetch()'http://php.net/manual/en/mysqli-stmt.fetch.php手冊,並沒有選擇想要回顯的行。您還需要綁定結果。 'bind_result()'。 –

回答

0

只要定義數組和使用例如在你的代碼中:

$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

謝謝你,但是使用我得到的代碼:'致命的錯誤:調用未定義的方法mysqli_stmt :: get_result()' – Rob