2015-11-25 89 views
4

很多人一直告訴我要通過mysql_ *並獲得mysqli或PDO。從php mysql_ *到mysqli

首先我選擇了Mysqli,因爲它看起來非常類似。

但是我在轉換我的網站時遇到了問題。

我似乎不能找到讓我的數據是這樣的等價的:mysql_result($result, $i, 'COL 2')

下面的代碼是什麼樣子,現在,但是我似乎無法找到一個辦法讓我的數據,如我用mysql_ *做了。

我在做這樣的:

<?php 
    $sql="SELECT * FROM items"; 
    $result=mysqli_query($GLOBALS["___mysqli_ston"], $sql); 

    for ($i = $start; $i < $end; $i++) { 
     if ($i == $total_results) { 
      echo ' 
      <div class="col-sm-12 col-lg-12 col-md-12"><h4>Der er ingen produkter at vise</h4></div> 
      '; 
      break; 
     } 
     echo ' 
     <div class="col-sm-4 col-lg-4 col-md-4" style="min-height:425px;"> 
         <div class="thumbnail"> 
          <img src="'.mysql_result($result, $i, 'COL 25').'" alt="" style="max-height:300px;"> 
          <div class="caption"> 
           <h4 class="pull-right">'.mysql_result($result, $i, 'COL 20').' point</h4> 
           <h4 style="color:rgb(220,145,27)">'.mysql_result($result, $i, 'COL 2').'</h4> 
           <p>Vare nr.: '.mysql_result($result, $i, 'COL 14').'</p> 
          </div> 
          <div class="buy"> 
           <form action="" method="POST" name="buy"> 
            <!--- <select name="variant" class="form-control"> 
             <option>small</option> 
            </select><br> --> 
            <button class="btn btn-m center-block" type="submit" style="color:white;background-color:rgb(220,145,27);">Køb</button> 
           </form> 
          </div> 
         </div> 
        </div> 
     '; 
    }; 
    ?> 
+0

看起來像是一個很好的機會來解決現有代碼中的低效問題。 – symcbean

+0

也查看了[mysqli prepared statements](http://php.net/manual/de/mysqli.prepare.php),它們使您的代碼更容易受到SQL注入的影響。 也看看[這個問題](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php),因爲它可以幫助你防止SQL注入。 – BRoebie

+0

@BRoebie儘管確實應該注意SQL注入,但是像這樣的查詢不會傳遞任何變量 - 因此不會受到SQL注入的攻擊。 – Qirel

回答

2

簡單地說,有沒有類似mysql_result,這意味着你必須調整你的代碼。您可以使用whileforeach循環遍歷所有行。

<?php 
$mysqli = $GLOBALS["___mysqli_ston"]; 
$sql = "SELECT * FROM items"; 

if ($result = mysqli_query($mysqli, $sql)) { 
    // Query passed, let's continue 
    if (mysqli_num_rows($result) > 0) { 
     // We have results! Continue 
     while ($row = mysqli_fetch_array($query)) { 
      echo '<img src="'.$row[24].'" alt="" style="max-height:300px;"><div class="caption"> 
       <h4 class="pull-right">'.$row[20].' point</h4> 
       <h4 style="color:rgb(220,145,27)">'.$row[2].'</h4> 
       <p>Vare nr.: '.$row[4].'</p> 
       </div> '; 
     } 
    } else { 
     echo "No results"; 
    } 
} else { 
    echo "Query failed"; 
} 
?> 

您還可以使用$row['columname']而是讀什麼你實際上是試圖輸出的代碼時,這使得更容易。

如果您使用mysqli_result已經死了,您可以創建自己的函數,它的功能大致相同(from this PHP.net comment)。 (我個人會參考上面的例子)。

function mysqli_result($res, $row, $field=0) { 
    $res->data_seek($row); 
    $datarow = $res->fetch_array(); 
    return $datarow[$field]; 
} 

我會在任何情況下,強烈建議您不要通過在一個全局變量你的數據庫連接,而是包括數據庫參數,併爲每個腳本的連接。

+0

感謝您的回答:-)在運行您提供的代碼時,出現以下錯誤: 注意:未定義的變量:查詢/Applications/XAMPP/xamppfiles/htdocs/b2b/pages/shop.php在線187 警告:mysqli_fetch_array()期望參數1爲mysqli_result,null爲187行中的/Applications/XAMPP/xamppfiles/htdocs/b2b/pages/shop.php中給出的值 –

+0

像187一樣:while($ row = mysqli_fetch_array( $ query)){ –

+0

啊,是的 - 這是因爲它應該是'$ result',就像這樣:'mysqli_fetch_array($ result)'對不起! – Qirel