Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么在Slim3中尝试使用PDO::PARAM_STR时,Slim会返回错误?_Php_Pdo_Slim 3 - Fatal编程技术网

Php 为什么在Slim3中尝试使用PDO::PARAM_STR时,Slim会返回错误?

Php 为什么在Slim3中尝试使用PDO::PARAM_STR时,Slim会返回错误?,php,pdo,slim-3,Php,Pdo,Slim 3,有人能解释一下为什么当我试图在代码中使用PDO::PARAM_STR时,SLIM3会返回一个错误吗 $app->add(new \App\Middlewares\BddMiddleware($Cpdo, $Ctwig)); class BddMiddleware { private $pdo; private $twig; public function __construct($pdo, $twig) { $this->pd

有人能解释一下为什么当我试图在代码中使用
PDO::PARAM_STR
时,SLIM3会返回一个错误吗

 $app->add(new \App\Middlewares\BddMiddleware($Cpdo, $Ctwig));

 class BddMiddleware {

    private $pdo;
    private $twig;

    public function __construct($pdo, $twig)
    {
        $this->pdo = $pdo;
        $this->twig = $twig;
    }

    public function __invoke($request, $response, $next){
        $query = $this->pdo->prepare('SELECT * FROM projet WHERE name = :name');
        $query->bindParam(':name', $path, PDO::PARAM_STR);
        $query->execute();
        $projet = $query->fetch();
我不明白

这是我的容器:

$container['pdo'] = function(){
    $pdo = new PDO('mysql:dbname=portfolio;host=localhost','root','', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    return $pdo;
};
这也不行

$query->bindParam(':name', $path, $this->pdo(PDO::PARAM_STR));

没有确切的错误信息,我只能猜测。确保您添加了

use PDO;
bddmidware
类的顶部

要能够查看错误消息,请通过更改应用程序配置以包括以下值来打开Slim调试信息:

$config = [  
    'settings' => [
        ...
        'debug' => true,
        'displayErrorDetails' => true,
        ...
    ],
]; 

告诉我们错误是非常非常重要的
PDO::PARAM_STR
是默认的数据类型,因此没有理由导致错误。而
$this->pdo(pdo::PARAM_STR)
不起作用的原因是,它使用
pdo::PARAM_STR
作为参数调用
$this
pdo()
方法。这显然是不正确的,除非定义了
pdo()
方法,否则将产生致命错误。我不知道你是从哪里找到这个语法的
PDO::PARAM_STR
是一个全局可用的常量。我想添加数据类型以避免在输入中注入变量。我知道PDO的好做法是在绑定参数时指定数据类型,但无论我在哪里尝试在我的应用程序(中间件或控制器)上指定数据类型,slim都会返回我:“slim应用程序错误发生了一个网站错误。对暂时的不便表示歉意。”真遗憾,我竟然忘记添加“使用PDO”在我的中间件的顶部。现在一切正常。谢谢你,扎姆罗尼,你解决了我的问题