从mysql迁移到mysqli

时间:2015-12-28 15:31:14

标签: php mysqli

嗨我正在尝试将一个站点从mysql转换为mysqli,我遇到了以下错误,有人可以看看他们,看看我失踪了什么

警告:mysqli_query()期望参数1为mysqli,给定

为null

警告:mysqli_fetch_array()期望参数1为mysqli_result,给定为null

继承人

部分的代码
    if(! function_exists(getMemberType) ) 
    {
function getMemberType($userid)
{
    $result = mysqli_query($con,"select memtype from user where user_id = '$userid' ");
    if ($line = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
        $response = $line[0];
    } 
    return $response;
}
}   

这是我的数据库文件

<?php
$con = mysqli_connect("localhost","datausername","password","databasename");

// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?> 

3 个答案:

答案 0 :(得分:4)

首先,您需要在函数名称周围使用引号(在function_exists调用中),并且还需要声明$ con对象 - 作为函数中的全局(如下所示)或传入函数的参数(这意味着您需要编辑函数调用的所有出现以包含引用)

if( !function_exists( 'getMemberType' ) ) {
    function getMemberType( $userid ){
        global $con;
        $result = mysqli_query( $con, "select memtype from user where user_id = '$userid' ");
        if ( $line = mysqli_fetch_array( $result,MYSQLI_ASSOC ) ) {
            $response = $line[0];
        } 
        return $response;
    }
} 

答案 1 :(得分:0)

你应该把mysqli对象传递给函数:

if(! function_exists(getMemberType) ) 
    {
    function getMemberType($con, $userid)
    {
        $result = mysqli_query($con,"select memtype from user where user_id = '$userid' ");
        if ($line = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
            $response = $line[0];
        } 
        return $response;
    }
}  

答案 2 :(得分:0)

您没有处理来自mysqli_query的调用中的错误,但必须抛出一个错误,因为$result为空。您没有检查此结果,除了成功案例之外,您是否正确处理以下if:

if ($line = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
    $response = $line[0];
} 
return $response;

如果线路返回错误怎么办?无论如何我们返回$ response,默默地忽略至少一个错误条件。

如果您处理查询错误,您将更好地了解问题所在。但是如果你提高了代码的防御性,那么你可能希望得到更好的运气来让你的重构得到解决 - 当你确切知道它们的起源而不是每次跟踪代码时,你会有更好的时间找到错误。

希望有所帮助!

PS:不要忘记清理数据库输入!我不会依赖来电者自己这样做。准备好的语句,支持我的mysqli但不是旧的mysql,完全解决了这个问题。