这个函数没有确定性的,不安全的。
你的PHP应用在创建MySQL存储函数时遇到了二进制日志安全限制:
'pdo_code' => 'HY000',
'db_code' => 1418,
'db_error' => 'This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled'
function createSafeStoredFunction($pdo, $functionName, $functionBody) {
$sql = <<
CREATE FUNCTION {$functionName}(n INT)
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
DECLARE result INT;
SELECT COUNT(*) INTO result FROM users WHERE id > n;
RETURN result;
END
SQL;
try {
$pdo->exec("DROP FUNCTION IF EXISTS {$functionName}");
$pdo->exec($sql);
return true;
} catch (PDOException $e) {
if ($e->getCode() == 'HY000' || $e->getCode() == '1418') {
error_log("存储函数创建失败(二进制日志安全限制): " . $e->getMessage());
throw new Exception("请为函数添加DETERMINISTIC、NO SQL或READS SQL DATA特性");
} else {
throw $e;
}
}
}