2017-03-03 13 views
0

データベースから画像を取得しています。私は以下のphpスクリプトを書いていますが、whileループの "echo"文だけが動作しますが、変数はdatabaseから来る値を表示しません。つまり、htmlだけが動作しています。Mysqliの準備クエリが機能しない

このようなエラーはありません。 私はその問題を知りません。

私を助けてください。 ありがとう!

$db_username = 'xxxxx'; 
$db_password = 'xxxx'; 
$db_name = 'xxxx'; 
$db_host = 'localhost'; 
$item_per_page = 9; 

$mysqli = new mysqli($db_host, $db_username, $db_password, $db_name); 
if ($mysqli->connect_error) { 
    die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error); 
} 

$page_number = filter_var($_POST["page"], FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH); 

if(!is_numeric($page_number)){ 
    header('HTTP/1.1 500 Invalid page number!'); 
    exit(); 
} 

$position = (($page_number-1) * $item_per_page); 

$results = $mysqli->prepare("select * FROM inserting_discount_product ORDER BY id DESC LIMIT ?, ?"); 

$results->bind_param("dd", $position, $item_per_page); 

$results->execute(); //Execute prepared Query 

$results->bind_result($pro_id, $pro_title, 
$pro_cat,$pro_desc,$pro_price,$pro_img,$pro_discount_price,$pro_discount_percent 
age,$product_code); 


while($results->fetch()){ 
       echo " 
       <div id='$pro_id' class='col-md-3 col-sm-4 col-xs-12'> 

       <h3 style='color:black'; align='center'>$pro_title</h3> 
       <div> 

       <img src='../admin_area/product_images/product_pics/$pro_img' width='180' height='180' /> <br> 
       </div> 


       <p style='color:black;margin-right:12px'><b>Price: $ $pro_discount_price </b> 

       <span style='color:black;text-decoration:line-through;margin-left:15px'> 
       <b style='color:red'>Price: $ $pro_price</b> 
       </span> 

       </p> 

       <a href='details.php?pro_id=$pro_id' style='margin-right:10px' class='detail_hover'><b>Details</b></a> 
       <span style='font-weight:bolder'>$pro_discount_percentage %</span> 
       <a href='index.php?add_cart=$pro_id&product_code=$product_code' style='color:orange;margin-left:10px' class='basket-logo'> 
       <span class='fa fa-shopping-cart fa-2x'></span></a> 


        </div> 

       "; 

} 

答えて

0

準備ができていない場合は準備がブール値を返すことができるため、prepare文をIFに入れることをお勧めします。

if($results = $mysqli->prepare("select * FROM inserting_discount_product ORDER BY id DESC LIMIT ?, ?")) 
     { 
      $results->bind_param("dd", $position, $item_per_page); 

      $results->execute(); //Execute prepared Query 

      $results->bind_result($pro_id, $pro_title, 
      $pro_cat,$pro_desc,$pro_price,$pro_img,$pro_discount_price,$pro_discount_percentage,$product_code); 

      while($results->fetch()) 
      { 
       // ... stuff 
      } 
      $results->close(); 
     } 
     else { echo $mysqli->error; } 

*を使用するのではなく、SELECTで返す列を明示的に宣言することもおそらくあります。行の下に1つの列を追加すると、SELECT *を実行するとすぐにすべてのコードが破損します。なぜなら、クエリはbind_resultの変数より多くの列を返すからです。

+0

あなたの提案1とし、代わりに「*」の列名を追加することによって、構文をrelacingた後、私はこのエラー ました「尽くさ67108864バイトの許可メモリサイズが(4294967296のバイトを割り当てしようとした)」 –

+0

オーケー、私は前にこのエラーを見てきました。原因はテーブルの定義です。選択しようとしている列の1つが非常に大きな型です。私はTEXTの代わりにLONGTEXT型を使用していました。 –

-1

はこちらをご覧ください:

What is the difference between single-quoted and double-quoted strings in PHP?

これはあなたのecho文であなたの引用の問題です。二重引用符と一重引用符が混在しています。 PHPでは、一重引用符はそのまま表示されるため、変数は表示されません。したがって、あなたが望むものを適切に表示するには、echoステートメントを連結に分割する必要があります。 phpはドット演算子を使って連結することに注意してください。例えば

:それは文字通りに「$のpro_id」を書いているので、あなたが出て響いていること、あなたのすべての変数は、プレーンテキストとしてエコーされるべきであると仮定しているため

echo "<div id='".$pro_id."' class='col-md-3 col-sm-4 col-xs-12'> 

エラーがない理由がありますhtmlは要素のidであり、変数は何ではありません。

また、マークアップは多くのhtmlです。あなたは、HTMLにループしながら、あなたの全体を転送し、次のようにループであなたの変数を取得するためにPHPのショートを使用することができます。

while($results->fetch()){ 
    //End php here, go into HTML markup. 
    ?> 

    <div id='<?=$pro_id?>' class='col-md-3 col-sm-4 col-xs-12'> 

    ... 

    <?php 
//Don't forget to add the closing brace to the while loop back in <?php 
} 

この方法はこちらを見て、PHPの省略表記使用しています:HTMLマークアップ内ながらページにこのエコーのPHPの変数を。これは、対処しなければならない引用符と文字列の量を減らし、これはダイレクトHTMLであるため作業がはるかに簡単です。あなたのコンテンツの大部分がHTML(それ)である場合、PHPの変数をいくつか追加するだけで、私は間違いなくあなたのPHPを閉じることを推奨しますか?>と短縮形を使用します。

+0

ちょうど記録のために:編集は、この答えを取り戻すことができませんでした。それは*と* wrongという質問とは無関係です –

関連する問題