请帮助我了解如何在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 人们嘲笑糟糕的代码。
我不明白如何以其他方式做到这一点。
答案 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
?
此问题广泛为您提供解决方案而非在此学习,了解答案。你的问题是基础知识。