【问题标题】:Invalid parameter number: number of bound variables does not match number of tokens (search filter php mvc)无效的参数号:绑定变量的数量与标记的数量不匹配(搜索过滤器 php mvc)
【发布时间】: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


    【解决方案1】:

    我终于找到了答案,我做的是这样的:

    public static function obtenerLaboratorios($list, $search, $numPerPage)
        {
            $startFrom = (intval($list)-1)*$numPerPage;
            if(!empty($search)){
                $sqlStr = "SELECT * FROM laboratorio WHERE `laboratorioNombre` LIKE :search LIMIT :startFrom,:numPerPage;";
                $parametros = array(
                    "search" => "%$search%",
                    "startFrom" => $startFrom,
                    "numPerPage" => $numPerPage
                );
            }else{
                $sqlStr = "SELECT * FROM laboratorio LIMIT :startFrom,:numPerPage;";
                $parametros = array(
                    "startFrom" => $startFrom,
                    "numPerPage" => $numPerPage
                );
            }
            return self::obtenerRegistros($sqlStr, $parametros);
        }
    

    这样,mvc 不会为 '' 符号处理错误,这就是导致我出现问题的原因。获取变量$search 的值,并将“%”放在变量的开头/结尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多