-1

本当にばかげた質問でごめんなさい。私はそのようなコードを持っていて、結果をwhileループで実行したいと思っています。私はmysqlbeforを使用していましたが、クエリは単純で、うまく実行されました。例

$sql_query = mysql_query($query);
while($row = mysql_fetch_array($sql_query)
 {
   $data_a = $row['a']; $data_b = $row['b'];
 }

今、私はoopを使用しており、データベースクラスと、データベースクラスから拡張されている新しいクラスに注入される接続ハンドラーがあります。私の問題はコードが実行された後です、私はこのエラーメソッドを取得します* mysqli_stmt :: fetch_assoc()*ここに私のコードがあります

<?php
class recentWorks extends DatabaseModelBase
{

public function show($tbl, $num_to_show, $site_url="") 
{

    $statement = $this->prepare('SELECT * FROM '.$tbl.' WHERE RAND()<(SELECT (( '.$num_to_show.' /COUNT(*))*10) FROM '.$tbl.' ) ORDER BY RAND() LIMIT  '.$num_to_show.'  ');
    $statement->execute();
    while ($recent_results = $statement->fetch_assoc())
    {
        $featured_work_name=$recent_results['name']; $featured_work_url=$recent_results['url']; $featured_work_thumb=$recent_results['img_thumb'];
        $featured_work_id=$recent_results['id'];$featured_work_desc=$recent_results['desc'];$featured_work_img=$recent_results['img_url'];
        ?>
  <li> 
  <a href="<?php echo $featured_work_img; ?>" class="fancybox thumb poshytip" title="Click To View Enlarged Image">
  <img src="<?php echo $featured_work_thumb; ?>" width="282px" height="150px" alt="<?php echo $featured_work_name; ?>' Image" />
  </a>
 <div class="excerpt">

 <span class="main_header"><a href="<?php echo $featured_work_url; ?>" target="_blank" class="poshytip recent-link" title="Click To Visit Website"><?php echo ucwords($featured_work_name); ?></a>
 </span>
<?php echo substr($featured_work_desc,0,300); ?>
</div>
</li>
        <?php
    }
    $statement->close();
    }

  }
 ?>

誰かが私のためにこれをデバッグしてください

4

1 に答える 1

1

あなたが以前持っていたものを見てみましょう

$sql_query = mysql_query($query);
   `----- missing error checking and handling
while ($row = mysql_fetch_array($sql_query))
         `---- missing error handline
{
    $data_a = $row['a']; $data_b = $row['b'];
           `----- complicated way of setting variables as arrays
}

今、あなたが今持っているものを見てみましょう(選択された行)

$statement = $this->prepare('SELECT * FROM '.$tbl.' WHERE RAND()<(SELECT (( '.$num_to_show.' /COUNT(*))*10) FROM '.$tbl.' ) ORDER BY RAND() LIMIT  '.$num_to_show.'  ');
                       `---- using prepare as if it would have been mysql_query()
$statement->execute();
            `----- same here

これは間違っています。ただあなたに言っています。最初にうまく機能するmysqli_*チュートリアルを検索することをお勧めします。SQLクエリを作成して起動する方法と、準備されたステートメントとは何か、およびそれらの使用方法を説明するもの。

私の提案: PHP マニュアルから始めてください。さまざまなライブラリを比較し、すべての mysql、mysqli、および PDO の例を示しています。

より簡単に移行できるように、mysql と mysqli を並べて比較することもできます。デュアル プロシージャルおよびオブジェクト指向インターフェイスです。

于 2012-09-30T17:04:17.607 に答える