2016-08-05 2 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

関連する問題