将mysql_connect更改为mysqli会导致函数失败

时间:2015-03-29 17:48:49

标签: php mysql mysqli

首先,对于 PHP MySQL ,我是新手。

我有一个名为levels MySQL 表,其中包含两列:level_idmapData。前段时间,我使用mysql_connect编写了一段代码,用户输入level_id并从表中提取相应的mapData,代码按预期工作。见下文:

<?php
$mysql_host = 'localhost';
$mysql_user = 'username';
$mysql_password = "password";
$mysql_database = 'database';

if (!mysql_connect($mysql_host,$mysql_user,$mysql_password)||!mysql_select_db($mysql_database)){
 die('Connection failed');
}

function get_map_data($level_id,$field){
$query = "SELECT $field FROM levels WHERE level_id='$level_id'";
    if($query_run = mysql_query($query)){
        if($query_result = mysql_result($query_run,0,$field)){
            return $query_result;
        }
    }
}

$user_input = mysql_real_escape_string(base64_decode($_GET["level_id"]));

$sql = "SELECT level_id FROM levels WHERE level_id='$user_input'";
$result = mysql_query($sql);

if(mysql_num_rows($result) >0){

$mapData = get_map_data($user_input,'mapData');

print $mapData;

}else{
    echo "0";
}

?>

如果用户输入了数据库中不存在的level_id,而不是mapData,则会收到0。一切正常!但是,我读到mysql_connect PHP 5.5 开始被弃用,并决定从我的文件中使用它切换到使用mysqli:

$conn = new mysqli($mysql_host, $mysql_user, $mysql_password, $mysql_database);

if ($conn->connect_error) {
    trigger_error('Database connection failed: '  . $conn->connect_error, E_USER_ERROR);
}

更改为mysqli后,我的get_map_data功能已停止工作。我已经确定mysqli连接可以正常工作,但我只是在使用它时让我的功能正常工作。如何使用mysqli修复我的get_map_data函数以使其再次运行?

2 个答案:

答案 0 :(得分:0)

您无法混合使用mysqlimysql_功能。此外,您的mysqli初始化正在创建object,而不是resource。最后,没有mysqli_result()函数,因此我们需要模拟您要做的事情。您想要第一行0,然后想要一个特定的$field。下面应该是你想要的。

function get_map_data($level_id,$field){
    $query = "SELECT $field FROM levels WHERE level_id='$level_id'";
    if($query_run = $mysqli->query($query)){
        //no mysqli->result() function, so we need to seek to the row.
        $query_run->data_seek(0);
        if($query_result = $query_run->fetch_assoc()){
            return $query_result[$field];
        }
    }
}

答案 1 :(得分:0)

你的get_map_data函数目前使用mysql_query运行查询,你必须将其更改为mysqli_query才能执行:

function get_map_data($level_id,$field){
  $query = "SELECT $field FROM levels WHERE level_id='$level_id'";
if($query_run = mysqli_query($conn,$query)){
    if($query_result = mysqli_result($query_run,0,$field)){
        return $query_result;
    }
}

}