是否可以将参数绑定到MYSQLi中的存储过程?

时间:2012-08-02 18:17:39

标签: php stored-procedures mysqli

我一直在阅读存储过程&来自这里的MYSQLi http://php.net/manual/en/mysqli.quickstart.stored-procedures.php

和其他来源,但我仍然不确定如何使用?调用存储过程(如准备好的声明)

是否可以将参数绑定到存储过程,与此类似:

$mysqli->query("CREATE PROCEDURE p(IN id_var INT) BEGIN INSERT INTO test(id)
         VALUES(id_var); END;"))
$mysqli->bindParam("i", $some_int);
$mysqli->query("CALL p");

1 个答案:

答案 0 :(得分:0)

绑定参数是PHP端操作;存储过程是MySQL的事情。这两者没有关系,不应该这样对待。

使用预准备语句和参数绑定,您可以使用prepare()方法定义查询,然后使用?将值绑定到bind_param()。因此,给出您的示例,预准备语句方法将如下所示:

$stmt = $mysqli->prepare("INSERT INTO test (id) VALUES (?)");
$stmt->bind_param('i', $some_int);
$stmt->execute();

另一方面,使用存储过程,您只需将其称为using the CALL command作为普通查询:

//procedure created beforehand
CREATE PROCEDURE p(IN id_var INT)
INSERT INTO test (id)
VALUES (id_var);
//now in PHP:
$mysqli->query("CALL p($some_int)");

我不确定您是否可以使用CREATE PROCEDURE方法运行query()

所以回答你的问题:是的,可以同时使用两者(因为它们是不同的东西),但不是你想象的方式,而且是多余的。