2014-03-03 116 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。我正在改变我的所作所为,因为我被告知它不安全并正在停止使用。安全是我最需要保证的。 –