2

我一直在阅读存储过程和 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");
4

1 回答 1

1

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

使用准备好的语句和参数绑定,您可以使用该prepare()方法定义一个查询,然后使用 将值绑定到?s 中bind_param()。因此,鉴于您的示例,准备好的语句方法如下所示:

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

另一方面,对于存储过程,您只需使用CALL命令作为普通查询调用它:

//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()方法运行。

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

于 2012-08-02T20:11:44.207 回答