php - 如何以正确的方式在mysql中创建存储过程

标签 php mysql stored-procedures mysqli

PHP mysqli 存储过程快速指南,http://php.net/manual/en/mysqli.quickstart.stored-procedures.php :

if (!$mysqli->query("DROP PROCEDURE IF EXISTS p") ||
    !$mysqli->query("CREATE PROCEDURE p(IN id_val INT) BEGIN INSERT INTO test(id) VALUES(id_val); END;")) {
    echo "Stored procedure creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}

这不是删除程序然后替换吗?这是正确的方法吗?删除它有什么意义?删除它是否不会否定拥有一个可以在 MySQL 连接期间调用的过程的全部意义?

最佳答案

您必须首先删除“旧”过程,否则 CREATE 将失败并出现“已存在”错误。对于数据库中的几乎每个对象来说都是一样的,例如

CREATE TABLE foo ...   // creates the table
CREATE TABLE foo ...   // will **NOT** replace the one just created

您不能仅通过重新定义来“覆盖”表/proc/db。您必须先删除原始的。

考虑一下,如果一家大银行的某个可怜的 DBA 意外运行,会发生什么困惑

CREATE DATABASE clients;

并废弃了他们的整个客户端数据库,因为数据库引擎用这个新的空数据库替换了原始数据库。

关于php - 如何以正确的方式在mysql中创建存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17580832/

相关文章:

php - 为 Mysqli 新连接设置 SSL 证书位置

mysql - 我可以在 MySQL 存储过程中覆盖 IN 参数吗

javascript - 如何在模态内提交时隐藏表列

mysql - Like 运算符中的变量或内部选择?

Sql - 使用最大值来选择其他数据

MYSQL:存储过程,插入一行,然后通过 LAST_INSERT_ID() 选择它

PHP Web 服务 sproc 与 sql 查询

mysql - mysql中的While条件

PHP 无法创建具有命名空间的类的实例

php - 从多维数组中获取第一项?