Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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编写的语句与MySQL存储过程相结合_Php_Mysql_Stored Procedures - Fatal编程技术网

将PHP编写的语句与MySQL存储过程相结合

将PHP编写的语句与MySQL存储过程相结合,php,mysql,stored-procedures,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 tinyi

我正在一个业余漫画网站上工作,我正在尝试使用一个存储过程将漫画数据插入数据库。有很多信息要转储,所以参数列表很大,但它不返回任何值

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文档。我尝试用这个prepare方法使用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;}
执行策略。这会产生与以前相同的错误。有没有人能用存储过程调用包含这么多变量的预处理语句


谢谢

这是一个非常简单的问题。其中至少有一个是数组,但它不应该是数组<代码>$cid、$ti、$url、$schedule、$nsfw、$form、$m、$t、$w、$r、$f、$s、$n。选中all以查看哪一个是数组,因为您的代码需要一个有效的字符串!非常感谢D