如何在数据库更新查询中使用FOR或WHILE?

时间:2013-09-22 10:05:57

标签: mysql sql database joomla mysqli

我为旧的 Joomla 网站制作了数据库更新查询,它看起来像下面的代码。当然这只是一个例子。真实查询包含50 name_x。我想做的是让它“更小”。换句话说,如何使用forwhilename_x创建它而不是逐个编写它们?我只是想不出语法......

if (isset($_POST['button_save']) or isset($_GET['button_save'])){
    $gmdb = & JFactory::getDBO();
    $update_query = "UPDATE jos_tablename
                        SET id     = '".$_POST["id"]."',
                            name_1 = '".$_POST["name_1"]."',
                            name_2 = '".$_POST["name_2"]."',
                            name_3 = '".$_POST["name_3"]."',
                            name_4 = '".$_POST["name_4"]."',
                            name_5 = '".$_POST["name_5"]."',
                            name_6 = '".$_POST["name_6"]."'
                      WHERE id     = 'something'";
    $gmdb->setQuery($update_query);
    $gmdb->query();}

2 个答案:

答案 0 :(得分:0)

对于初学者来说,这是一种非常不安全的方式来更新数据库中的信息,其次是html页面名称所有输入字段name="name[]"所以它们作为一个数组发送,你可以简单地循环使用foreach($_POST["name"] as $array)

答案 1 :(得分:0)

查询只是一个字符串。你可以像其他任何东西一样在循环中构建它。请查看以下示例。

请注意,将未转义的POST数据添加到查询中是一种非常非常糟糕的做法。

$set_array = array(
    // In real world you must escape POST data!
    "id = '".$_POST["id"]."'" 
);
for ($i = 1; $i < 100500; $i++) {
    // In real world you must escape POST data, check that it exists, etc.
    $set_array[] = "name_".$i." = '".$_POST["name_".$i]."'";
}
$update_query = "UPDATE jos_tablename SET ".join(', ', $set_array)." WHERE id = 'something'";
$gmdb->setQuery($update_query);
$gmdb->query();