将Mysql函数更改为Mysqli会破坏脚本

时间:2015-08-13 22:03:10

标签: php mysql mysqli

我有这个脚本删除网站上的某张图片。它是用mysql函数编写的,所以我想将它更新为mysqli,但这样做会使脚本停止工作。没有显示来自脚本的消息,没有显示php错误并添加了error_reporting(E_ALL);也没有显示任何错误。

原始剧本:

    if(isset($_POST['F3Verwijderen']))
    try 
    {                           
        //delete the file
        $sql = "SELECT PandFoto3 FROM tblpand WHERE `PK_Pand` = '".$pandid."'";

        $con = mysql_connect('WEBSITE.mysql', 'WEBSITE', 'PASS');
        if (!$con) {
        die('Could not connect: ' . mysql_error());
        }
        mysql_select_db("WEBSITE");
        $result = mysql_query($sql, $con);
        while ($row = mysql_fetch_array($result)) {                     
            if(file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$row['PandFoto3'])) {
                unlink($_SERVER['DOCUMENT_ROOT'].'/'.$row['PandFoto3']);
            } else {
            echo $row['PandFoto3'];
            }
        }
        //delete the path url from the database field
        mysql_query("UPDATE tblpand SET PandFoto3 = NULL WHERE `PK_Pand` = '".$pandid."'");
        mysql_close($con);          


        header('Location: ../admin/pand-aanpassen.php?id='.$pandid);
    }

更新为mysqli:

try 
    {                           
        //delete the file
        $sql = "SELECT PandFoto3 FROM tblpand WHERE `PK_Pand` = '".$pandid."'";

        $con = mysqli_connect('WEBSITE.mysql', 'WEBSITE', 'PASS');
        if (!$con) {
        die('Could not connect: ' . mysqli_error());
        }
        mysqli_select_db("WEBSITE");
        $result = mysqli_query($sql, $con);
        while ($row = mysqli_fetch_array($result)) {                        
            if(file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$row['PandFoto3'])) {
                unlink($_SERVER['DOCUMENT_ROOT'].'/'.$row['PandFoto3']);
            } else {
            echo $row['PandFoto3'];
            }
        }
        //delete the path url from the database field
        mysqli_query("UPDATE tblpand SET PandFoto3 = NULL WHERE `PK_Pand` = '".$pandid."'");
        mysqli_close($con);         


        header('Location: ../admin/pand-aanpassen.php?id='.$pandid);
    }

1 个答案:

答案 0 :(得分:3)

修改

  

“没有php错误并添加error_reporting(E_ALL);也没有显示任何错误。”

  • 那是因为它不是PHP问题,而是MySQL问题。
    • 这些是两种不同的动物。

正如我在文章中所说,你需要在($sql, $con)周围切换这些变量($con, $sql)

然后这个:

$con = mysqli_connect('WEBSITE.mysql', 'WEBSITE', 'PASS');

只使用第4个参数而不是mysqli_select_db("WEBSITE");,而不是将连接变量传递给。{/ p>

$con = mysqli_connect('WEBSITE.mysql', 'WEBSITE', 'PASS', 'WEBSITE');

语法为:

  • 宿主
  • 用户名
  • 密码(如果有)
  • 数据库

您也可以完成mysqli_select_db($con, "WEBSITE");

旁注:在mysql_ (参见脚注)中,连接是最后一次,与首先出现的mysqli_不同。

对UPDATE执行相同操作并首先传递连接参数。

mysqli_query($con, "UPDATE...

旁注:要验证更新是否真的成功,请使用affected_rows()

另一件事,mysqli_error()需要与mysqli_error($con)建立连接,并检查您的查询是否有错误。

即:

$result = mysqli_query($con, $sql) or die(mysqli_error($con));

参考文献:

旁注:

您使用的是try(),但没有使用catch()。删除它,或参考手册:

示例#4摘自手册:

<?php
function inverse($x) {
    if (!$x) {
        throw new Exception('Division by zero.');
    }
    return 1/$x;
}

try {
    echo inverse(5) . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
} finally {
    echo "First finally.\n";
}

try {
    echo inverse(0) . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
} finally {
    echo "Second finally.\n";
}

// Continue execution
echo "Hello World\n";
?>

最后的说明:

您目前的代码向SQL injection开放。使用prepared statementsPDO with prepared statements它们更安全

脚注:( MySQL和MySQLi比较)

关于mysql_query()

  

混合mysql_query(字符串$ query [,resource $ link_identifier = NULL]

mysqli_query()

  

混合mysqli_query(mysqli $ link,字符串$ query [,int $ resultmode = MYSQLI_STORE_RESULT])