首先,对于 PHP 和 MySQL ,我是新手。
我有一个名为levels
的 MySQL 表,其中包含两列:level_id
和mapData
。前段时间,我使用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
函数以使其再次运行?
答案 0 :(得分:0)
您无法混合使用mysqli
和mysql_
功能。此外,您的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;
}
}
}