将PHP预处理语句与MySQL存储过程相结合

时间:2015-02-20 07:08:02

标签: php mysql stored-procedures

我正在开发一个爱好漫画网站,我正在尝试使用将漫画数据插入数据库的存储过程。要转储的信息很多,因此参数列表很大,但不会返回任何值。

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;}

执行策略。这给出了与以前相同的错误。有没有人有办法使用存储过程调用这么多变量的预准备语句?

谢谢!

0 个答案:

没有答案