Php 使用存储过程时发生Laravel 7错误:-SQLSTATE[42000]:语法错误或访问冲突:1064

Php 使用存储过程时发生Laravel 7错误:-SQLSTATE[42000]:语法错误或访问冲突:1064,php,mysql,laravel,Php,Mysql,Laravel,我试图在Laravel中使用存储过程调用,它将根据作为参数之一传递的操作类型执行CRUD操作。然而,我得到了一个错误。这里显示了完整的错误 SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to

我试图在Laravel中使用存储过程调用,它将根据作为参数之一传递的操作类型执行CRUD操作。然而,我得到了一个错误。这里显示了完整的错误

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXEC my_stored_procedures(?,?,?,?,?,?,?,?,?,?,?,?)' at line 1 (SQL: EXEC my_stored_procedures(INSERT,0,Pulak,Satpathy,pulak@gmail.com,$2y$10$ruH7V/z7nTNbjXVsQR8AOe2JmrlaPe5duiYIjA1poQxAH1MFi4OZ2,9999099990,1992-10-01,Male,BBSR,India,2020-09-25,11:55:36 ))
在本例中,我尝试将数据插入从表单页面获取的数据库中

下面是MySQL代码-

CREATE DEFINER=`root`@`localhost` PROCEDURE `my_stored_procedures`(IN actiont VARCHAR(100),IN id_key BIGINT(200),IN first VARCHAR(500),IN last VARCHAR(500),IN em VARCHAR(500),IN pass VARCHAR(500),IN mob BIGINT,IN dob DATE,IN gen VARCHAR(10),IN addr VARCHAR(500),IN cot VARCHAR(500),IN time TIMESTAMP(6))
BEGIN
    DECLARE rowno BIGINT DEFAULT 0;
    IF actiont="INSERT" THEN
       
                INSERT INTO users( 
                        first_name,
                        last_name,
                        email,
                        password,
                        mobno,
                        dob,
                        gender,
                        address,
                        country,
                        TIME_STAMP
                                )
                        VALUES (first,last,em,pass,mob,dob,gen,addr,cot,time);
                        
        
    ELSEIF actiont="UPDATE" THEN
    
    UPDATE users
    SET
    first_name=first,
    last_name=last,
    email=em,
    password=pass,
    mobno= mob,
    dob =dob,
    gender= gen,
    address= addr,
    country= cot,
    updated_at= time
    WHERE id=id_key;
    
    ELSEIF actiont="SELECT" THEN
    
    SELECT * FROM users WHERE id=id_key;
    
    ELSEIF actiont="DELETE" THEN
    
    DELETE FROM users
    WHERE id=id_key;
    
    ELSE 
    SELECT ("invalid");
    
    END IF;
END
和控制器代码

<?php

namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Database\Eloquent\Model;
use App\Newuser;

class NewUserRegnController extends Controller
{
       public function submitNewRegn(Request $request){
     
    $first_name         =   $request->first_name;
    $last_name          =   $request->last_name;
    $email              =   $request->email;
    $password           =   Hash::make($request->password, [
                                     'memory' => '1024',
                                     'time' =>  '2',
                                     'threar' =>  '2',
                                    ]);
    // $confirm_password    =   $request->confirm_password;
    $mobno              =   $request->mobno;
    $dob                =   $request->dob;
    $gender             =   $request->gender;
    $address            =   $request->address;
    $country            =   $request->country;
    date_default_timezone_set("Asia/Kolkata"); 
    $time               =   date("Y-m-d,H:i:s ");

      
    $act =  "INSERT";

    DB::select('EXEC my_stored_procedures(?,?,?,?,?,?,?,?,?,?,?,?), array($act,0,$first_name,$last_name,$email,$password,$mobno,$dob,$gender,$address,$country,$time));
   
      }

}


我想你应该换一行

$time               =   date("Y-m-d,H:i:s ");
为此:

$time = date("Y-m-d H:i:s");
我认为日期格式中的逗号使sql尝试编写两个值而不是一个值。在这里,从您得到的错误:

,India,2020-09-25,11:55:36 ))

正如@Giacomo M所指出的
我不得不使用
CALL
而不是
EXEC
。似乎
EXEC
不再工作。

mysql中似乎没有EXEC函数。你应该用CALLoh!成功了。Stack overflow中的另一个答案是使用EXEC来使用laravel中的存储过程,所以我使用了EXEC.Btw,你能不能把它作为一个答案,这样我就可以勾选它?我发现了问题。这是由@Giacomo M.指出的。