【发布时间】:2021-12-31 04:13:08
【问题描述】:
我正在尝试为表格产品创建搜索过滤器,并尝试在同一个 sql 查询中进行分页和过滤。我使用的是 MVC 模式。
这是模型:
<?php
namespace Dao\test;
use Dao\Table;
class Productos extends Table
{
public static function obtenerProductos($list, $search, $numPerPage)
{
$startFrom = (intval($list)-1)*$numPerPage;
$sqlStr = "SELECT * FROM productos WHERE name LIKE '%:search%' LIMIT :startFrom,:numPerPage;";
$parametros = array(
"search" => $search,
"startFrom" => $startFrom,
"numPerPage" => $numPerPage
);
return self::obtenerRegistros($sqlStr, $parametros);
}
public static function obtenerNumeroProductos()
{
$sqlStr = "SELECT * FROM productos;";
return self::obtenerRegistros($sqlStr, array());
}
}
?>
这是控制器:
<?php
namespace Controllers\test;
use Controllers\PublicController;
use Views\Renderer;
class Productoss extends PublicController
{
public function run() :void
{
\Utilities\Site::addLink("/public/css/test1.css");
if(isset($_GET["search"])){
$search = $_GET["search"];
}else{
$search="";
}
$numPerPage = 5;
if(isset($_GET["list"])){
$list=$_GET["list"];
}
else{
$list=1;
}
$viewData = array(
"totalProductos" => 0,
"totalList" => "",
);
$viewData["producto"] = \Dao\test\Productos::obtenerProductos($list, $search, $numPerPage);
$viewData["lista"] = \Dao\test\Productos::obtenerNumeroProductos();
foreach ($viewData["lista"] as $producto) {
$viewData["totalProductos"] = $viewData["totalProductos"] + 1;
}
$viewData["totalList"] = ceil($viewData["totalProductos"]/$numPerPage);
for ($i=1; $i <= $viewData["totalList"]; $i++) {
$viewData["nList"]["number"] = $i;
$viewData["nPages"][] = $viewData["nList"];
}
if($list<$viewData["totalList"]){
$viewData["next"] = true;
$viewData["nextBtn"] = $list+1;
}
if ($list>1) {
$viewData["previous"] = true;
$viewData["prevBtn"] = $list - 1;
}
Renderer::render("test/Productoss", $viewData);
}
}
?>
我得到错误:
致命错误:未捕获的 PDOException:SQLSTATE[HY093]:无效参数 number:绑定变量的数量与中的标记数量不匹配 C:\xampp\htdocs\PHPmvc\SimplePHPMvcOPP\src\Dao\Table.php:70 堆栈 跟踪:#0 C:\xampp\htdocs\PHPmvc\SimplePHPMvcOPP\src\Dao\Table.php(70): PDOStatement->execute() #1 C:\xampp\htdocs\PHPmvc\SimplePHPMvcOPP\src\Dao\test\Productos.php(18): Dao\Table::obtenerRegistros('SELECT * FROM p...', Array) #2 C:\xampp\htdocs\PHPmvc\SimplePHPMvcOPP\src\Controllers\test\Productoss.php(34): Dao\test\Productos::obtenerProductos(1, 'a', 5) #3 C:\xampp\htdocs\PHPmvc\SimplePHPMvcOPP\index.php(27): Controllers\test\Productoss->run() #4 {main} 投入 C:\xampp\htdocs\PHPmvc\SimplePHPMvcOPP\src\Dao\Table.php 在第 70 行
【问题讨论】:
标签: php search model-view-controller