2014-03-03 111 views
-1

我在我的網站上通過MySQLi建立了一個成功的連接。但是現在我的搜索腳本已經過時了,並且和我一樣對此很陌生,我正在努力理解如何將我的腳本轉換爲mysqli。將MySQL查詢轉換爲MySQLi

function doSearch() { 
    $output = ''; 
    if(isset($_POST['search'])) { 
     $searchq = $_POST['search']; 
     $searchq = preg_replace ("#[^0-9a-z]#i","",$searchq); 

     $query = mysql_query("SELECT * FROM entries WHERE name LIKE '%$searchq%' or description LIKE '%$searchq%' or content LIKE '%$searchq%'") or die("Could not search"); 
     $count = mysql_num_rows($query); 
     if($count == 0) { 
      $output = '<tr><tr>No results found.</tr></td>'; 
     } else { 
      while($row = mysql_fetch_array($query)) { 
       $eName = $row['name']; 
       $eDesc = $row['description']; 
       $eCont = $row['content']; 
       $id = $row['id']; 
       $elvl = $row['level']; 
       $ehp = $row['hp']; 

       $output .= '<tr><td><a href="http://seersvillage.com/v1.2/npc.php?id=' .$id. '" onclick="document.linkform.submit();">'.$eName.'</a></td><td>'.$eDesc.'</td><td>'.$elvl.'</td><td>'.$ehp.'</td></tr>'; 
      } 
     } 
    return $output; 
    } 
} 

據我所知,mysql_query需要改變我是吧?儘管我完全不確定還需要改變什麼。我試過看其他例子,但是我被代碼覆蓋了。

我有我的connect.php文件attatched的functions.php文件,其中放置了上述代碼。

一些援助將不勝感激。

編輯:也忽略可憐的腳本@ $輸出,雖然有一個很好的笑聲。 :)

+1

一般來說,mysqli是一個直接替代品。唯一的真正的區別是mysqli使用'($ con,$ query)'類型參數而不是'($ query,$ con)'在mysql中。但要正確轉換爲mysqli,您需要從根本上重寫所有查詢以利用佔位符和準備好的語句。函數名稱大多是1:1,只需添加一個'i'。 –

+0

你需要替換所有的mysql交互函數:mysql_query,mysql_fetch_array和mysql_num_rows。因爲我沒有給你替換,所以沒有答案,但你可以在'mysqli'文檔中查看它。 – alexis

回答

-1

您可以在這裏找到http://php.net/mysqli

+0

謝謝,我一直在對此進行掃描。可悲的是,我仍然是新的常規MySQL。 :P所以我仍然覺得很難學習。 –

+0

試着找到一個包裝類,你可以在這裏看到每個函數如何與樣本一起工作。 http://www.w3schools.com/php/php_ref_mysqli.asp – eddwinpaz

+0

這是一個更容易學習的格式。謝謝。^_^ –

-1

更多信息$connect變量是在你所連接的腳本設置變量。

<?php 
    function doSearch() { 
    $output = ''; 
    if(isset($_POST['search'])) { 
     $searchq = $_POST['search']; 
     $searchq = preg_replace ("#[^0-9a-z]#i","",$searchq); 
     $sql = "SELECT * FROM entries WHERE name LIKE '%$searchq%' or description LIKE '%$searchq%' or content LIKE '%$searchq%'"; 
     $query = mysqli_query($connect, $sql); 
     $count = mysqli_num_rows($query); 
     if($count == 0) { 
      $output = '<tr><tr>No results found.</tr></td>'; 
     } else { 
      while($row = mysqli_fetch_array($query)) { 
       $eName = $row['name']; 
       $eDesc = $row['description']; 
       $eCont = $row['content']; 
       $id = $row['id']; 
       $elvl = $row['level']; 
       $ehp = $row['hp']; 

       $output .= '<tr><td><a href="http://seersvillage.com/v1.2/npc.php?id=' .$id. '" onclick="document.linkform.submit();">'.$eName.'</a></td><td>'.$eDesc.'</td><td>'.$elvl.'</td><td>'.$ehp.'</td></tr>'; 
      } 
     } 
    return $output; 
    } 
} 
+0

你正在做的是放置變量,而不是用戶的原始$ _POST輸入。 – les

+0

這是轉換它,並保留所有可怕的[SQL注入漏洞](http://bobby-tables.com/)。爲什麼不使用佔位符?這實際上是兩條線。 – tadman

-1

如果你要去打擾升級你的MySQL,你應該考慮PDO爲PDO支持12個不同的驅動程序,而不是庫MySQLi,只支持MySQL。

+0

但是這並不回答他的問題。 – dsimer

+0

我們暫時只會使用MySQL。我正在改變我的所作所爲,因爲我被告知它不安全並正在停止使用。安全是我最需要保證的。 –