gpt4 book ai didi

php - 从 PHP 调用 MySql 函数

转载 作者:行者123 更新时间:2023-11-29 22:24:08 25 4
gpt4 key购买 nike

我在 MySQL 中创建了一个函数:

CREATE DEFINER=`DBadmin`@`localhost` FUNCTION `insert_color`(
p_color_Name VARCHAR(45)
) RETURNS int(11)
BEGIN
DECLARE
color_count INT;
SELECT COUNT(p_color_Name) INTO color_count FROM Color
WHERE p_color_Name = Color.Color_Name;

IF color_count >= 1 THEN
RETURN -1;
ELSEIF color_count = 0 THEN
INSERT INTO Color(Color_Name)
VALUES (p_color_Name);
RETURN 1;
END IF;
END

我想在 PHP 中调用它来使用输入的信息进行插入,但我遇到了麻烦。

<?php  

$conn = new mysqli('localhost','DBadmin','dbadmin','BirdDatabase');

if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
echo "-1";
return false;
}

$var1 = $_GET['selectedOption'];
$var2 = $_GET['newNameText'];
$var3 = $_GET['selectedType'];

else if ($var1 == "Color"){
$sqlVariableUser = 'SELECT insert_color(?);';
if(!$stmt = $conn->prepare($sqlVariableUser)){
exit($conn->error);
return false;
} else {
$stmt->bind_param($var2);
$stmt->execute();
$result= $stmt->get_result();
exit ($result);
}
}
?>

我是 MySQL 新手,我知道如何使用 Oracle 数据库执行此操作,但我在 MySQL 连接方面遇到问题。任何建议都会有帮助:)

最佳答案

完成一项相当简单的任务似乎有很多繁琐的内容。当我们只用 SQL 就能完成我们需要的事情时,我们倾向于避免创建 MySQL 存储程序。

当函数从两个(或更多) session 同时执行时,函数中存在潜在的竞争条件。两次执行中的 SELECT 可能找不到指定的 color_name,然后两个 session 都会尝试插入相同的 color_name

如果color_name在颜色表中应该是唯一的,则声明一个UNIQUE约束,并让数据库为您检查它,并在尝试插入重复的color_name时返回错误 到表中。或者,如果您不想抛出错误,请使用 INSERT IGNORE。或者,INSERT ... ON DUPLICATE KEY 语句。

如果由于某种原因无法将 color_name 设为 UNIQUE,您仍然可以完成该函数正在执行的操作,只需使用一个 INSERT ... SELECT 语句即可执行检查行是否已存在。

INSERT INTO color (color_name) 
SELECT v.color_name
FROM ( SELECT c.color_name
FROM ( SELECT ? AS color_name ) c
LEFT
JOIN color d
ON d.color_name = c.color_name
WHERE d.color_name IS NULL
AND c.color_name IS NOT NULL
) v

内联 View c 返回包含所提供值的行,如果匹配行尚不存在,则我们要插入到表中的 color_name 值。

内联 View v 使用反连接模式,仅当表中不存在匹配行时才从 c 返回行。外部 INSERT ... SELECT 将尝试从 v 插入一行。

(您询问建议;这些是我的建议。)

关于php - 从 PHP 调用 MySql 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30418798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com