【问题标题】:Prepared statements while fetching prepared statement获取准备好的语句时准备好的语句
【发布时间】:2012-10-27 18:45:13
【问题描述】:

我想用一个 INSERT 查询为从前一个查询中提取的每一行使用准备好的语句创建一个循环。以更直观的方式:

进行查询
获取时
- 进行新查询

我无法关闭我的声明,因为我需要它来继续工作... 问题是当我们使用准备好的语句时,我们必须在执行新的 prepare() 之前获取所有数据。那么,我该怎么做呢?也许没有声明,但这不是一个好的解决方案。

【问题讨论】:

    标签: mysqli prepared-statement


    【解决方案1】:

    如果您尝试这样做,您将杀死您的 DB(如果您有 DBA,您的 DBA 会杀死您)。问题是您想要做的是每行向数据库发送一个插入请求。您必须为每一行数据一遍又一遍地创建和处理所有这些命令。那是昂贵的

    如果您下定决心这样做,没有什么可以阻止您在从第一个读取的循环中创建第二个准备好的语句(当然名称不同),但我强烈建议不要这样做。至少,缓冲传入的数据并一次插入几百行。

    【讨论】:

    • 感谢您的回答。真实情况是这样的:用户粘贴一个文本,这个文本被分成几个词组,然后所有这些词组都被其他词组固定。在所有这些都修好之后(可能需要几天时间),出于最终目的,我想将它们移到另一张桌子上。我知道的唯一方法是获取并重新插入。
    • 那么您是否知道该短语是否已修复,并且您想通过从一张表到另一张表进行比较来做到这一点?
    • 嗯...问题是我不希望决赛桌被奇怪的东西填满。通过这种方式,我确保只有经过审查且格式正确的数据才能进入决赛桌。所以...表 1 就像一个临时框,所有数据都在最后一个之前进入,就像一个队列。
    • 为什么不将数据编辑后直接插入到最终表格中?如果您想最后一次查看编辑过的数据,那么为什么不创建一个中间表。为每个短语分配一个 ID,然后您可以使用 JOIN 从第一个和第二个表中选择一个(或多个)短语及其版本,然后插入到最后一个表中。
    • 这将是一个不错的解决方案。谢谢! :)