我正在编辑我在内联编辑中找到的教程。它使用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子句中任意数量的列或任何数量的条件的选择查询?
答案 0 :(得分:0)
numRows()是一个奇怪的函数,因为它只运行一个查询来查找它返回的行数。我认为这是一个值得怀疑的做法。如果有必要找出SELECT将返回多少行,则可以将SELECT *更改为SELECT COUNT(*)。 MySQL可以为MyISAM表优化它,而且可以节省不必将结果集传输到客户端。
否则不需要使用预准备语句,因为准备好的语句只会增加DBMS只执行一次语句时必须完成的工作量(它必须处理两个请求 - 准备,执行, - 而不是一个 - 执行,加上额外的工作来清除连接被破坏时的缓存语句)。