我创建了一个CLI PHP脚本,旨在允许我对我的数据库运行更新脚本.该脚本按预期工作,运行顺序更新文件,回滚错误等.但是,我唯一无法正确执行的是创建函数.我错过了什么?
脚本
以下是脚本如何工作的基础知识:
$sql = file_get_contents($file);
$sql = "USE `$database`;" . $sql;
$stmt = $pdo->prepare($sql);
try
{
$stmt->execute();
if($stmt->errorCode() !== '00000')
{
throw new Exception("Error: Unable to run update $file\n" . print_r($stmt->errorInfo(), true));
}
}
catch(Exception $ex)
{
$pdo->rollBack();
echo "Error: Exception occured running update $file\n" . print_r($ex, true) . "\n";
throw $ex;
}
Run Code Online (Sandbox Code Playgroud)
SQL
这是SQL代码的Function部分的示例:
DELIMITER ;;
CREATE DEFINER=CURRENT_USER FUNCTION `uuid_from_bin`(b BINARY(16)) RETURNS char(36) CHARSET latin1
DETERMINISTIC
BEGIN
DECLARE hex CHAR(32);
SET hex = HEX(b);
RETURN LOWER(CONCAT(LEFT(hex, 8), '-', MID(hex, 9,4), '-', MID(hex, 13,4), '-', MID(hex, 17,4), '-', RIGHT(hex, 12)));
RETURN 1;
END ;;
Run Code Online (Sandbox Code Playgroud)
如果我在MySQL Workbench中运行此代码,它将按预期运行.当我使用PDO运行我的脚本时,除了函数之外的所有内容都会被创建并填充.我没有错误也没有例外.
至今...
我已经尝试删除定义器,认为"CURRENT_USER"用户可能是'user @ randomip',系统中的用户被定义为'user @%'.
我也刚刚从SQL中删除了定义器.仍然适用于MySQL Workbench,但不适用于此脚本.
我也将函数拉出到自己的SQL中,结果相同.
其他信息
MySQL 5.5.37-0ubuntu0.14.04.1
PHP 5.5
当我连接PDO时,我没有设置数据库,因为脚本可能需要创建数据库.但脚本附有一个USE语句.所有其他DDL语句都可以工作.
用户所有,但格兰特在架构权限基于图案,特别是CI_%
解决方案,更新DELIMITER
更新了代码以删除DELIMITER
#DELIMITER USED TO BE HERE
CREATE DEFINER=CURRENT_USER FUNCTION `uuid_from_bin`(b BINARY(16)) RETURNS char(36) CHARSET latin1
DETERMINISTIC
BEGIN
DECLARE hex CHAR(32);
SET hex = HEX(b);
RETURN LOWER(CONCAT(LEFT(hex, 8), '-', MID(hex, 9,4), '-', MID(hex, 13,4), '-', MID(hex, 17,4), '-', RIGHT(hex, 12)));
RETURN 1;
END;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |