【问题标题】:Issues when converting mysql_* into mysqli_*. The code doesn't work anymore将 mysql_* 转换为 mysqli_* 时的问题。代码不再起作用
【发布时间】:2015-08-11 14:45:49
【问题描述】:

我有以下从互联网上获得的“检查用户名可用性”代码。

它是用 mysql_* 编写的,但我想将其转换为 mysqli_* ,因为 PHP7 将不再支持 mysql_*

但是转换后不行,用户名没有勾选,我总是变成Green Tick

我也尝试了 OOP 编程 Procedural ,最后我只是在 mysql 的末尾添加了一个“i”来表示 mysqli。这是带有 mysql_* 的代码。谁能帮忙转换一下?

文件dbConnector.php

 <?php

 class DbConnector {

var $theQuery;
var $link;

function DbConnector(){

    // Get the main settings from the array we just loaded
    $host = 'localhost';
    $db = 'accesspi';
    $user = 'root';
    $pass = '';

    // Connect to the database
    $this->link = mysql_connect($host, $user, $pass);
    mysql_select_db($db);
    register_shutdown_function(array(&$this, 'close'));

   }

  //*** Function: query, Purpose: Execute a database query ***
function query($query) {

    $this->theQuery = $query;
    return mysql_query($query, $this->link);

 }

   //*** Function: fetchArray, Purpose: Get array of query results ***
function fetchArray($result) {

    return mysql_fetch_array($result);

  }
  //*** Function: close, Purpose: Close the connection ***
  function close() {

     mysql_close($this->link);
 }
}
?>

文件check.php

<?php
include("dbConnector.php");
$connector = new DbConnector();

$username = trim(strtolower($_POST['username']));
$username = mysql_escape_string($username);

$query = "SELECT username FROM admin WHERE username = '$username' LIMIT 1";
$result = $connector->query($query);
$num = mysql_num_rows($result);

echo $num;
mysql_close();
?>

文件 index.php 带有 javascript 代码

<link href="../style.css" rel="stylesheet" type="text/css" />

<script type="text/javascript"    src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script>
<script>
$(document).ready(function(){
$('#username').keyup(username_check);
});

function username_check(){  
var username = $('#username').val();
if(username == "" || username.length < 4){
$('#username').css('border', '3px #CCC solid');
$('#tick').hide();
}else{

jQuery.ajax({
type: "POST",
url: "check.php",
data: 'username='+ username,
cache: false,
success: function(response){
if(response == 1){
$('#username').css('border', '3px #C33 solid'); 
$('#tick').hide();
$('#cross').fadeIn();
}else{
$('#username').css('border', '3px #090 solid');
$('#cross').hide();
$('#tick').fadeIn();
     }

  }
  });
  }
   }

</script>

<style>
#username{
padding:3px;
font-size:18px;
border:3px #CCC solid;
}

#tick{display:none}
#cross{display:none}


</style>
</head>

 <body>


 Username: <input name="username" id="username" type="text" />
<img id="tick" src="tick.png" width="16" height="16"/>
<img id="cross" src="cross.png" width="16" height="16"/>

</body>
</html>

转换后的文件 dbConnector. php

 <?php

 class DbConnector {

 var $result;
 var $conn;

 function DbConnector(){

    // Get the main settings from the array we just loaded
    $host = 'localhost';
    $db = 'accesspi';
    $user = 'root';
    $pass = '';

    // Connect to the database
    $conn= mysqli_connect($host, $user, $pass, $db);

  }

 //*** Function: query, Purpose: Execute a database query ***
 function query($query) {

        $result = $conn->query($query);

  }

  //*** Function: fetchArray, Purpose: Get array of query results ***
  function fetchArray($result) {

    return $result->fetch_array(MYSQLI_ASSOC);

  }

  //*** Function: close, Purpose: Close the connection ***
  function close() {

  $conn->close();

}

 }

 ?>

和检查.php

     <?php
   include("dbConnector.php");
   $connector = new DbConnector();
   if (isset($_POST['username'])){
   $username = trim(strtolower($_POST['username']));
   $username = $connector->real_escape_string($username);

    $query = "SELECT username FROM admin WHERE username = '$username' LIMIT 1";
   $result = $connector->query($query);
   $num = $result->num_rows;

  echo $num;
  $connector->close();
  }
  ?>

【问题讨论】:

  • SO 不是代码转换服务。
  • 您向我们展示了您所做的转换,我们会指出任何错误。 我们不是为你写的
  • 我将立即发布转换
  • 我贴出来了,你能看到吗 RiggsFolly
  • 现在给我们一点线索,让我们知道转换后的代码有什么问题

标签: php mysqli


【解决方案1】:

试试这个:

<?php
class DbConnector {

    private $theQuery;
    private $link;

    public function __construct(){

        // Get the main settings from the array we just loaded
        $host = 'localhost';
        $db = 'accesspi';
        $user = 'root';
        $pass = '';

        // Connect to the database
        $this->link = new mysqli($host, $user, $pass,$db);
        register_shutdown_function(array(&$this, 'close'));
    }

    /**
     * Function: query, Purpose: Execute a database query
     * @param $query
     * @return bool|mysqli_result
     */
    public function query($query) {

        $this->theQuery = $query;
        return $this->link->query($query);

    }

    /**
     * Function: fetchArray, Purpose: Get array of query results
     * @param $result mysqli_result
     * @return mixed
     */
    public function fetchArray($result) {
        return $result->fetch_array();
    }

    /**
     * Function: close, Purpose: Close the connection
     */
    public function close() {
        if(isset($this->link)){
            $this->link->close();
            unset($this->link);
        }
    }

    /**
     * @return mysqli
     */
    public function getLink(){
        return $this->link;
    }


}

检查.php:

<?php
include("dbConnector.php");
$connector = new DbConnector();

$username = filter_input(INPUT_POST,'username',FILTER_SANITIZE_STRING);
$username = $connector->getLink()->real_escape_string($username);

$query = "SELECT username FROM admin WHERE username = '$username' LIMIT 1";
$result = $connector->query($query);
$num = $result->num_rows;

echo $num;
$connector->close();

【讨论】:

  • 不,它不起作用,我仍然总是得到一个绿色的勾
  • 这一行有问题 public function close() { $this->link->close(); }
  • 什么问题?对我来说它工作正常..也许用 if($this->link) $this->link->close();
  • 现在出现语法错误,意外'->' (T_OBJECT_OPERATOR)
  • 能否请您从答案中再次复制课程并重试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 2018-06-26
  • 2020-10-26
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多