本文介绍了pdo的prepared语句给出了无效的参数编号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我进行了查询以从数据库中选择某些值.不幸的是,我收到此错误消息:无效的参数号

Hello I have made a query to select certain values from the database. Unfortunately I am getting this error message: Invalid parameter number

代码如下

$vehicles = DB::select( DB::raw("
        SELECT v.id, v.brand, v.type, v.description, v.airco, v.seats, v.hourly_rent
        FROM vehicle as v
        WHERE v.id
        NOT IN((SELECT v.id FROM vehicle as v INNER JOIN reservation as r on r.`vehicle_id` = v.id WHERE r.status_id in(3,4,5)
        AND (
                (
                    (:start >= r.startdate AND :eind <= r.enddate )
                    OR
                    (:start <= r.startdate AND :eind >= r.enddate )
                )
                OR
                (
                    (:start >= r.startdate AND :start <= r.enddate)
                    OR
                    (:eind >= r.startdate AND :eind <= r.enddate)
                )
            )
        GROUP BY v.id
        ))"),
         array(
            'start' => $startdate,
            'eind' => $enddate
         )
    );

推荐答案

您不能多次使用相同的参数名称.为每个参数指定自己的名称,并精确绑定该数量的参数:

You can't use the same parameter name multiple times. Give each parameter its own name and bind exactly that number of parameters:

$vehicles = DB::select( DB::raw("
        SELECT v.id, v.brand, v.type, v.description, v.airco, v.seats, v.hourly_rent
        FROM vehicle as v
        WHERE v.id
        NOT IN((SELECT v.id FROM vehicle as v INNER JOIN reservation as r on r.`vehicle_id` = v.id WHERE r.status_id in(3,4,5)
        AND (
                (
                    (:starta >= r.startdate AND :einda <= r.enddate )
                    OR
                    (:startb <= r.startdate AND :eindb >= r.enddate )
                )
                OR
                (
                    (:startc >= r.startdate AND :startd <= r.enddate)
                    OR
                    (:eindc >= r.startdate AND :eindd <= r.enddate)
                )
            )
        GROUP BY v.id
        ))"),
         array(
            'starta' => $startdate,
            'einda' => $enddate,
            'startb' => $startdate,
            'eindb' => $enddate,
            'startc' => $startdate,
            'eindc' => $enddate,
            'startd' => $startdate,
            'eindd' => $enddate
         )
    );

这篇关于pdo的prepared语句给出了无效的参数编号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 06:54
查看更多