Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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 如何使用Laravel 8的存储过程进行用户输入_Php_Mysql_Laravel_Crud_Laravel 8 - Fatal编程技术网

Php 如何使用Laravel 8的存储过程进行用户输入

Php 如何使用Laravel 8的存储过程进行用户输入,php,mysql,laravel,crud,laravel-8,Php,Mysql,Laravel,Crud,Laravel 8,我已经在我的Linux Mint 20上为我的项目安装了Laravel 8,并且我已经搜索了许多关于如何使用Laravel中的存储过程以及用户输入参数的来源,其中一个来源是: 但当我试图从tambah_transaksisupplier.blade.php添加数据时,结果如下所示: 照亮\数据库\查询异常 SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解在第1行“exec spSupplier namasup

我已经在我的Linux Mint 20上为我的项目安装了Laravel 8,并且我已经搜索了许多关于如何使用Laravel中的存储过程以及用户输入参数的来源,其中一个来源是:

但当我试图从tambah_transaksisupplier.blade.php添加数据时,结果如下所示:

照亮\数据库\查询异常 SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解在第1行“exec spSupplier namasupplier,alamatsupplier”附近使用的正确语法SQL:exec spSupplier namasupplier,alamatsupplier

下面是tambah_transaksisupplier.blade.php的一部分,它用于使用存储过程作为添加数据的接口添加新数据

<p>
    <form action="/home/tambah_transaksisupplier/store_supplier" method="post">
        <h2>TAMBAH SUPPLIER</h2>
        <p>Supplier yang sudah pernah menyuplai sebelumnya, tetap diisi nama dan alamatnya untuk kode transaksi masuk</p><br>
        {{csrf_field()}}
            
            Supplier     :<br>
            <input type="text" name="namasupplier" value=""><br></br>
            Alamat Supplier     :<br>
            <input type="text" name="alamatsupplier" value=""><br></br>

            <input type="Submit" name="tambah_supplier" value="Tambahkan Supplier"><br> </input><br>
    </form>
</p>
下面是一段SQL,如果您需要知道,它包含存储过程

DELIMITER ##
CREATE PROCEDURE spSupplier(vNamaSupplier VARCHAR(255), vAlamatSupplier VARCHAR(255))
BEGIN

    DECLARE kdSup, nSup, aSup, vTMbaru, vKSbaru VARCHAR(255) DEFAULT '';
    DECLARE ada, totdata, caridata INT DEFAULT 0;

    DECLARE cCariNamaAlamat CURSOR FOR
    SELECT kodesupplier, namasupplier, alamatsupplier FROM Supplier;

    SELECT COUNT(*) INTO totdata FROM Supplier;
    SELECT UPPER(vNamaSupplier) INTO @uNamaSupplier;
    SELECT UPPER(vAlamatSupplier) INTO @uAlamatSupplier;
    
    SET caridata = 1;
    OPEN cCariNamaAlamat;
    WHILE caridata<=totdata DO
        FETCH cCariNamaAlamat INTO kdSup, nSup, aSup;
            IF @uNamaSupplier=nSup AND @uAlamatSupplier=aSup THEN
                SET ada=1;
                SELECT (CAST(SUBSTRING(MAX(notransmasuk),4,4)AS INT)+1) INTO @vtmbaru FROM TransaksiMasuk;
                SET vTMbaru = (CASE
                    WHEN @vtmbaru <10 THEN CONCAT('TM-000', @vtmbaru)
                    WHEN @vtmbaru <100 THEN CONCAT('TM-00', @vtmbaru)
                    WHEN @vtmbaru <1000 THEN CONCAT('TM-0', @vtmbaru)
                    WHEN @vtmbaru <10000 THEN CONCAT('TM-', @vtmbaru)
                END);
                INSERT INTO TransaksiMasuk VALUES
                (vTMbaru,NOW(),kdSup);
            END IF;
            SET caridata=caridata+1;
    END WHILE;
    CLOSE cCariNamaAlamat;

    IF ada = 0 THEN
        SELECT (CAST(SUBSTRING(MAX(kodesupplier),4,4)AS INT)+1) INTO @supplierbaru FROM Supplier;
        
        SET vKSbaru =(CASE
            WHEN @supplierbaru <10 THEN CONCAT('S-000', @supplierbaru)
            WHEN @supplierbaru <100 THEN CONCAT('S-00', @supplierbaru)
            WHEN @supplierbaru <1000 THEN CONCAT('S-0', @supplierbaru)
            WHEN @supplierbaru <10000 THEN CONCAT('S-', @supplierbaru)
        END);

        INSERT INTO Supplier VALUES
        (vKSbaru,@uNamaSupplier,@uAlamatSupplier);

        SELECT (CAST(SUBSTRING(MAX(notransmasuk),4,4)AS INT)+1) INTO @vtmbaru FROM TransaksiMasuk;

        SET vTMbaru =(CASE
            WHEN @vtmbaru <10 THEN CONCAT('TM-000', @vtmbaru)
            WHEN @vtmbaru <100 THEN CONCAT('TM-00', @vtmbaru)
            WHEN @vtmbaru <1000 THEN CONCAT('TM-0', @vtmbaru)
            WHEN @vtmbaru <10000 THEN CONCAT('TM-', @vtmbaru)
        END);
                
        INSERT INTO TransaksiMasuk VALUES
        (vTMbaru,NOW(),vKSbaru);

    END IF;
END
##
DELIMITER ;

谁能给我一个解决办法,我该怎么做来修复这个?尤其是在控制器文件中,我想您应该使用以下代码:

public function store_supplier(Request $request)
{

    DB::select(DB::raw("exec spSupplier namasupplier, alamatsupplier"),[
        'namasupplier' => $request,
        'alamatsupplier' => $request
    ]);

    return redirect('home/tambah_transaksisupplier');
}
DB::select('exec spSupplier(?,?)',array($value1,$value2));
使用DB::select时不需要使用DB::raw,因为它是由defaut生成的。我还认为占位符需要是什么?或者先问:这是你的答案吗?