Php 使用存储过程时发生Laravel 7错误:-SQLSTATE[42000]:语法错误或访问冲突:1064
我试图在Laravel中使用存储过程调用,它将根据作为参数之一传递的操作类型执行CRUD操作。然而,我得到了一个错误。这里显示了完整的错误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
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.指出的。