这是我第一次使用存储过程。
以前的开发人员已经有一个适用的存储过程,但它只接受1个参数。
我使用PHP传递参数:
<?php
$containers = $_POST['cntnum'];
$shortened = array();
foreach($containers as $short)
{
$shortened[] = substr($short, 0, 10);
}
$sans_check = preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$shortened)));
$sans = "'" . implode("', '", $sans_check) ."'";
// At this point, $sans looks like this: 'value1', 'value2', 'value3'...
// now I send $sans to the stored procedure
$thecall = mysqli_query($dbc, "CALL SP_ContSearch_TEST($sans)");
?>
我可以毫无问题地发送1个值。我收回了数据。但是当有超过1个时,我会收到以下错误:
Incorrect number of arguments for PROCEDURE table.storeprocedure; expected 1, got 3
以下是存储过程的样子(缩短了时间):
Begin
DECLARE sans_check varchar(100); // adjusted from 10, but same error message
SET sans_check = SUBSTR(cont,1,10);
SELECT
`inventory`
,delivery_date
,pool
FROM
inventory
WHERE
CONTAINER_CHECK IN (cont);
END
参数cont是varchar(11)//不确定这是否意味着什么
这是我第一次尝试存储过程调用,我可以返回一个值的数据。我需要为多个值返回数据。
答案 0 :(得分:2)
错误消息绝对正确。您正在向存储过程发送3个参数,该过程只需要一个。
您所做的是您修改了存储过程,该过程采用单个字符串,因此它仍然需要一个字符串。
您应该修改存储过程的定义以获取3个参数(问题中缺少该部分)
以下是带有3个参数的存储过程声明的示例:
CREATE PROCEDURE SP_ContSearch_TEST
(IN sans1 CHAR(10),
IN sans2 CHAR(10),
IN sans3 CHAR(10)
-- add as many other parameters here as you need
)
BEGIN
-- your stored proc logic here.. can use sans1, sans2, and sans3
END
您还应该更改代码以使用参数化查询,而不是您现在正在做的方式。请参阅:http://php.net/manual/en/pdo.prepared-statements.php或http://php.net/manual/en/mysqli.prepare.php