【问题标题】:INSERT INTO prepared statements, PHP MYSQL, optimising a lot of columnsINSERT INTO 准备好的语句,PHP MYSQL,优化了很多列
【发布时间】:2014-06-27 07:41:00
【问题描述】:

请帮助我了解如何在 php 中优化 mysql 查询。当你有很多列时,准备好的语句看起来像

$inst = $db->prepare("insert into year_$year (user_name,type_of_day,month_row,day_1,day_2,day_3,day_4,day_5,day_6,day_7,day_8,day_9,
day_10,day_11,day_12,day_13,day_14,day_15,day_16,day_17,day_18,day_19,day_20,day_21,day_22,day_23,day_24,day_25,day_26,day_27,day_28,day_29,day_30,day_31)
values
(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

$inst->execute($chunk_post[$init]);

此代码来自这里:http://govnokod.ru/php?page=356 人们嘲笑糟糕的代码。

我不明白如何以其他方式做到这一点。

【问题讨论】:

  • 什么是你不明白的?会出现什么问题?
  • 拜托拜托拜托阅读database normalisation

标签: php mysql sql sql-insert


【解决方案1】:

您可以使用PDO

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>

在这种情况下,即使您有很多字段,您也可以毫无混淆地识别这些字段。

【讨论】:

    【解决方案2】:

    一个小笑话:

    你可以使用for ($i = 1; $i &lt;= 31; i++) {} 来构建你的查询;)

    现实:

    在此处阅读有关数据库规范化的信息:http://databases.about.com/od/specificproducts/a/normalization.htm

    你的终极目标应该是第三范式。

    您应该考虑与一个月相关的某一天。

    想想一张桌子month 和一张桌子day

    了解SQL JOIN

    当然,您不会有 DataType DateTime

    这个问题是广泛为您提供解决方案,而不是在这里学习在那里学习的答案。您的问题是关于基础知识的。

    【讨论】:

      【解决方案3】:

      可以选择使用 dibi 库并以这种方式使用它:

      $query = dibi::query("SELECT ...
      FROM p... -- comment
      WHERE p.id = %i
      AND p.lang = %i", $id, 1);
              $raw = $query -> fetchAll();
              foreach($raw as $n => $row) {
                  array_push($output, Array('p_id' => $row['p'],//comment
                      'p_w' => $row['p2']
      
                  ));
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-02
        • 2022-01-06
        • 2012-12-09
        • 1970-01-01
        相关资源
        最近更新 更多