从mysql更改为mysqli标准的progure - 准备好的语句?

时间:2015-04-16 21:42:06

标签: php mysql mysqli

我正在编辑我在内联编辑中找到的教程。它使用mysql,但显然我想使用mysqli,因为mysql是折旧的。我已经改变了大部分内容,但有一部分让我感到困难。有一个单独的文件被调用连接到数据库并运行查询,所以主页我将在页面顶部的顶部声明我声明

require_once("dbcontroller.php");
$db_handle = new DBController();
$sql = "SELECT * from php_interview_questions";
$faq = $db_handle->runQuery($sql);

dbcontroller.php的相关部分是:

function runQuery($query) {
        $result = mysqli_query($conn, $query);
        while($row=mysqli_fetch_assoc($result)) {
            $resultset[] = $row;
        }       
        if(!empty($resultset))
            return $resultset;
    }

    function numRows($query) {
        $result  = mysqli_query($conn,$query);
        $rowcount = mysqli_num_rows($result);
        return $rowcount;   
    }

我认为我需要使用准备好的陈述吗?如果是这样,如何处理可能涉及WHERE子句中任意数量的列或任何数量的条件的选择查询?

1 个答案:

答案 0 :(得分:0)

numRows()是一个奇怪的函数,因为它只运行一个查询来查找它返回的行数。我认为这是一个值得怀疑的做法。如果有必要找出SELECT将返回多少行,则可以将SELECT *更改为SELECT COUNT(*)。 MySQL可以为MyISAM表优化它,而且可以节省不必将结果集传输到客户端。

否则不需要使用预准备语句,因为准备好的语句只会增加DBMS只执行一次语句时必须完成的工作量(它必须处理两个请求 - 准备,执行, - 而不是一个 - 执行,加上额外的工作来清除连接被破坏时的缓存语句)。