首先,我使用搜索词 php pdo 或 mysql 数据库名称转义的各种组合广泛阅读和搜索了这个问题。可悲的是,我还没有找到任何人处理同样的问题。
我有一个 mysql 数据库,其架构名为www.company.com
通常这不是问题,因为它可以很容易地使用反引号字符进行转义。
但是,当使用 mysqli 或 PDO 调用该模式中的存储过程时,它总是返回:
PROCEDURE www.company.com.usp_stored_procedure_name does not exist
显然,这是在 ` 周围放置 ` 字符的简单方法,www.company.com
但是我无法使用 mysqli 或 PDO 来执行此操作。我也未能在文档中找到对此问题的参考。
我还应该指出,这个过程在 mysql 命令行客户端或 MySQL Workbench 中运行得很好,因为在这些情况下,我可以包含反引号或use
语句。此外,我已经验证这与数据库用户权限无关。
但是,每次我尝试通过 mysqli 或 PDO 使用存储过程时,都会收到上述错误。
由于此过程负责 ETL 操作并返回多个结果集,因此将其转换为从 php 调用的单个语句将非常痛苦。我非常希望有人以前处理过这个问题。
以下是一些尝试过的方法: 注意:反引号嵌套似乎会导致论坛混乱,因此我使用“-”字符代替了 `
我在调用 mysqli_connect 时尝试使用转义的数据库名称...
$mysqli=mysqli_connect($host, $this->db->username, $this->db->password, '-www.company.com-');
...并收到错误。
我尝试调用带有 oa 数据库名称的存储过程...
$mysqli->multi_query("CALL usp_stored_procedure_name(50, '2013-05-01')");
...并收到上面提到的错误。
我尝试使用数据库名称调用存储过程...
$mysqli->multi_query("CALL -www.company.com-.usp_stored_procedure_name(50, '2013-05-01')");
...并收到上面提到的错误。