我正在开发一个爱好漫画网站,我正在尝试使用将漫画数据插入数据库的存储过程。要转储的信息很多,因此参数列表很大,但不会返回任何值。
PROCEDURE `update_comic`(IN cid int, title varchar(50), url varchar(100), sched int,
nsfw char(1), form int,
m tinyint, t tinyint, w tinyint, r tinyint, f tinyint, s tinyint, n tinyint)
我想使用预准备语句调用此存储过程。我的第一次尝试看起来像这样:
if(!$stmt = $db->prepare("CALL update_comic(?,?,?,?,?,?,?,?,?,?,?,?,?)"))
{echo "Prepare UPDATE didn't work";}
if(!$stmt->bind_param("issisiiiiiiii",$cid, $ti, $url, $schedule, $nsfw,
$form, $m, $t, $w, $r, $f, $s, $n))
{echo "Bind UPDATE didn't work";}
if(!$stmt->execute())
{echo "Execute UPDATE didn't work";}
但它在stmt-> execute()行返回“注意:数组到字符串转换”,并且执行更新失败。我做了一些阅读并收集到这是因为如果你不使用bind_param(),execute()会获取一个参数数组,因此我的bind_param无法正常工作。
我提到了这个PHP mysqli prepared statement for stored procedure with out parameter Stack Overflow线程和这个http://php.net/manual/en/mysqli.quickstart.stored-procedures.php PHP文档等。我尝试将MySQL会话变量与此准备方法
一起使用$stmt = $db->prepare('SET @cid := ?');
$stmt->bind_param('i', $cid);
$stmt->execute();
对于每个变量,我不会提交给我的优秀读者的完整列表,以及
if(!$stmt = $db->prepare("CALL update_comic(@cid, @ti, @ur, @sch, @ns,
@frm, @m, @t, @w, @r, @f, @s, @n)"))
{echo "Prepare UPDATE didn't work";
$result = false;}
if(!$stmt->execute())
{echo "Execute UPDATE didn't work";
$result = false;}
执行策略。这给出了与以前相同的错误。有没有人有办法使用存储过程调用这么多变量的预准备语句?
谢谢!