2016-08-02 14 views
0

にPDOクエリを変換した後、私は2つのテーブルmatieressous_matieresからデータを抽出するためのスクリプトを持っているが、それはPDOのために書かれています2つのテーブルのデータを持っているにもかかわらず、何も示していない私の新しいmysqliのコード:結果はmysqliの

$query = 'SELECT 
       m.id AS m_id, m.url AS m_url, m.title AS m_title, 
       s.id AS s_id, s.url AS s_url, s.title AS s_title 
      FROM matieres m 
      INNER JOIN sous_matieres s ON m.url = s.parent'; 
$stmt = $mysqli->query($query); 
$stmt->execute(); 
$stmt->store_result(); 

while ($row = $stmt->fetch()) { 
    $matieres[$row->m_id]['url'] = $row->m_url; 
    $matieres[$row->m_id]['title'] = $row->m_title; 
    $matieres[$row->m_id]['sous_matieres'][$row->s_id] = $row; 
} 

foreach ($matieres as $m_id => $matiere) { 
    echo "<h2>$matiere[title]</h2>"; 
    foreach ($matiere['sous_matieres'] as $id => $sm) { 
     echo "<div> 
        <a href='{$sm->s_url}'>{$sm->s_title}</a> 
       </div>"; 
    } 
} 

Iドンそれがない場合は、$stmt->bind_result()と内部の変数を知っている。 (加入無し)通常のmysqliのクエリのように私は$stmt->bind_result()

+0

私は '$ mysqli-> query()'は既に実行済みの文を返していると思います。 ' - > execute()'を呼び出すと、あなたが意図していないことが起きるかもしれません...実行すると...実際にデバッグの目的で戻り値をキャッチします。 (とにかく、私は不確かですが、なぜmysqliに切り替えるか) – Jakumi

答えて

1

mysqli_stmt::fetch内の変数として選択された列名を宣言する必要がありますが、準備されたステートメントでの結果に変数をバインドする際にそれらの変数を移入するために、使用されています。

$result = $mysqli->query($query); 

while ($row = $result->fetch_object()) { 
    $matieres[$row->m_id]['url'] = $row->m_url; 
    $matieres[$row->m_id]['title'] = $row->m_title; 
    $matieres[$row->m_id]['sous_matieres'][$row->s_id] = $row; 
} 

http://php.net/manual/en/mysqli.query.phphttp://php.net/manual/en/class.mysqli-result.phpを参照してください:結果を得るための別の方法は、あなたがしようとしている方法を使用することができますmysqli_resultクラスを使用することです。

+0

申し訳ありませんが、$ result-> fetchObject()は有効なmySQLi関数ですか?私はそれがPDOだと思っていました。それはmySQLiの$ result-> fetch()に相当します。 – medk

+0

このような質問については、マニュアルを参照することをお勧めします。上記の関連ページにリンクしています。 – deceze

+0

エラーを表示する場合:致命的なエラー:未定義のメソッドmysqli_stmtに呼び出し::はfetchObjectを() – medk

関連する問題