PHP / MySQL:如何减少代码以回显选择结果(工作代码)

Posted

技术标签:

【中文标题】PHP / MySQL:如何减少代码以回显选择结果(工作代码)【英文标题】:PHP / MySQL: How to reduce code to echo Select results (working code) 【发布时间】:2015-09-01 11:04:22 【问题描述】:

我是 phpmysql 的新手,希望你能在这方面帮助我一些技巧或 cmets。

我有一个带有表“Languages”的 MySQL 数据库,我想从中获取所有数据,然后在我的页面上回显它,并在其周围添加一些 html 标记。

下面的示例中,“ISO”是语言代码,“$trans”是语言名称的选定翻译,例如英语。 此处的输出是(自定义)复选框列表,每种语言都有一个复选框。

到目前为止,我有以下按预期工作的方法,但由于我是新手,所以我想知道我是否真的需要 While 循环,或者是否有 更短/更好的方法来获得相同的效果 - 最后我只需要回显我的 Select 的结果

我的 PHP:

// select data from db
$tbl = "Languages";

$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");
if($conn->connect_error)
    die("Connection failed: " . $conn->connect_error);
 
$sql = "SELECT * FROM " . $tbl . " ORDER BY ISO ASC";
$result = $conn->query($sql);  
// create array
while($arrLanguages = $result->fetch_assoc())
    $languages[] = array("ISO" => $arrLanguages["ISO"], "trans" => $arrLanguages[$lang]);

$conn->close();

// echo results with some HTML tags
$i = 1;
foreach($languages as $language)
    echo "<input type='checkbox' class='checkSingle' id='language" . $i . "' name='language' value='" . $language['ISO'] . " - " . $language["trans"] . "' />";
    echo "<label for='language" . $i . "'>" . $language['ISO'] . "</label>";
    $i++;

【问题讨论】:

我觉得还不错! 在这里codereview.stackexchange.com 发布您的问题。 *** 是为了解决问题,而不是为了代码审查 那么不要做select *。永远不要吸进你不会使用的领域。只要有select ISO, trans,然后是$languages[] = $arrLanguages @marijnz0r:感谢您的反馈! :) @MarcB:非常感谢 - 这太棒了!肯定会申请。 :) 如果您将其发布为答案,那么我会接受。 【参考方案1】:

如果您不打算使用表中的所有字段,请不要使用select *。请求稍后会被丢弃的字段是浪费带宽/cpu 周期。

$sql = "SELECT ISO, trans ...";
... execute ...
while($arrLanguages = ...) 
   $languages[] = $arrLanguages;

由于您只选择了您真正想要的两个字段,$arrLanguages 将只包含这些字段,并且您在完整的数组创建中没有类型。这是由fetch_assoc() 调用自动完成的。

【讨论】:

再次感谢 Marc - 我会尽快接受您的建议。 :)

以上是关于PHP / MySQL:如何减少代码以回显选择结果(工作代码)的主要内容,如果未能解决你的问题,请参考以下文章

PHP没有在正确的地方回响

如何在PHP中回显已准备好的sql语句的结果

如何动态回显php $ _GET变量的多个结果

对mysql中的多列求和

Ajax PHP - 仅当 DOM Explorer 打开(边缘)时才会回显结果

如何使用 PHP 回显 mysql SELECT COUNT(*) [重复]