INSERT INTO准备好的语句,PHP MYSQL,优化了很多专栏

时间:2014-06-27 07:41:01

标签: php mysql sql sql-insert

请帮助我了解如何在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 人们嘲笑糟糕的代码。

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

3 个答案:

答案 0 :(得分: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();
?>

在这种情况下,即使你有很多字段,你也可以毫不费力地识别这些字段。

答案 1 :(得分:0)

可以选择使用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']

            ));
        }

答案 2 :(得分:0)

一个小笑话:

您可以使用for ($i = 1; $i <= 31; i++) {}构建您的查询;)

现实:

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

你的终极目标应该是第三种正常形式。

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

考虑表格month和表格day

了解SQL JOIN

当然,您不会拥有DataType DateTime

此问题广泛为您提供解决方案而非在此学习了解答案。你的问题是基础知识。