gpt4 book ai didi

mysql 准备语句

转载 作者:可可西里 更新时间:2023-11-01 08:54:52 26 4
gpt4 key购买 nike

我有一系列 16 个 PREPARE、EXECUTE 和 DEALLOCATE 语句(在存储过程中),每个语句都将行插入到不同的表(表 1 到表 16)中。例如:

SET @Command1 = CONCAT("insert into TABLE1" ,  ...etc.. );
PREPARE stmt1 FROM @Command1 ;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

SET @Command1 = CONCAT("insert into TABLE2" , ...etc.. );
PREPARE stmt1 FROM @Command1 ;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

.
.
.

SET @Command1 = CONCAT("insert into TABLE16" , ...etc.. );
PREPARE stmt1 FROM @Command1 ;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

当我执行存储过程时,INSERT 间歇性地工作。有时所有 16 个插入都起作用,但有时它们不起作用。

在存储过程的最后一个 CALL 中,前 2 次插入(到 TABLE1 和 TABLE2 中)和最后 4 次插入(TABLE 13 到 16)有效,但不是插入到表 3 到 12 中。

你能解释一下为什么吗?不会是因为我使用了相同的变量/句柄 command1 和 stmt1?

最佳答案

在 MySQL 中,PrepareExecute 命令的组合应该与 placeholders 一起使用 - 使用 concat 字符串节省您的时间(可能是其中之一你的 concats 只是出错了),当然 - 防止 sql 注入(inject)(是的!)

所以...只需像这样构建您的语句:

-- in MySQL ? is a placeholder
set @sampleQuery = 'select name into @testValue from myTable where id = ?';
set @idParam = 'NT54X9';

prepare sampleStatement from @sampleQuery;
execute sampleStatement using @idParam; -- `using` is the key point here
deallocate prepare sampleStatement;

select @testValue

关于mysql 准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6757363/

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