灵活的功能,用于从PHP更新DB记录

时间:2012-05-26 17:28:18

标签: php mysql arrays

有没有办法让下面给出的代码可以重用于不同的表,例如使用foreach?那么,如何发送和使用列名和值的数组?任何一个例子都受到高度赞赏。

<?php
    include_once 'include/DatabaseConnector.php';
    if(isset($_POST['flightNum'])) {
        $flightNum=$_POST['flightNum'];
        $from=$_POST['from'];
        $STADate=$_POST['STADate'];
        $query = 'UPDATE flightschedule 
                  SET frm="'.$from.'",STADate="'.$STADate.'"
                  WHERE flightNum="'.$flightNum.'"';
        DatabaseConnector::ExecuteQuery($query);
        echo '1';
    } else { 
        echo '0'; 
    }
?>

更新:如果我不熟悉列名,该怎么办?如何创建灵活的UPDATE语句?

2 个答案:

答案 0 :(得分:0)

您可以将代码转换为可重复使用的功能。例如。

function updateDB($tableName, $flightNum, $from, $STADate) {
    include_once 'include/DatabaseConnector.php';
    $query = 'UPDATE ' . $tableName 
              SET frm="'.$from.'",STADate="'.$STADate.'"
              WHERE flightNum="'.$flightNum.'"';
    $execute = DatabaseConnector::ExecuteQuery($query);
    return $execute;
}

并使用它

if(isset($_POST['flightNum']) {
    $update = updateDB('flightschedule', $_POST['flightNum'], $_POST['from'], $_POST['STADate']);
    echo $update;
}

<强>更新

  

我想将一个列名数组发送到函数'updateDB'。   假设这些是UPDATE的SET和WHERE部分的列名   声明。然后我可以使用FOREACH,但我需要一些例子   此

这就是你如何做到的。

function updateDB($tableName, $columns, $where) {
    //do some validation here to check if proper data is being passed like
    if(!isarray($columns)) {
        throw new Exception('argument two $columns should be an associative array');
    }
    include_once 'include/DatabaseConnector.php';
    $query  = 'UPDATE ' . $tableName;
    foreach($columns as $column => $data) {
        $query .= ' SET ' . $column . ' = ' . $data . ', ';
    }
    //remove last comma from the update query string
    $query = substr($query, 0, -1);
    $query .= ' WHERE ' . $where['column'] . ' = ' . $where['value'];
    $execute = DatabaseConnector::ExecuteQuery($query);
    return $execute;
}

并使用它。

if(isset($_POST['flightNum']) {
    $columns = array(
        'frm' => $_POST['frm'],
        'STADate' => $_POST['STADate']
    );
    $where = array(
        'column'=> 'flightNum', 
         'value' =>  $_POST['flightNum']
    );
    $update = updateDB('flightschedule', $columns, $where);
    echo $update;
}

答案 1 :(得分:0)

这样的事情应该有效:

function generateUpdateQuery($table, $fields, $where) {
    $updateFields = array();
    foreach ($fields as $k => $v) {
        $updateFields[] = $k.' = \''.$v.'\'';
    }
    $sqlQuery = 'UPDATE '.$table.
                ' SET '.implode(', ', $updateFields).
                ' WHERE '.implode(' AND ', $where);

    return $sqlQuery;
}

echo generateUpdateQuery('table_name',
                        array(
                            'field_a' => '10',
                            'field_b' => 'hello',
                            'field_c' => 'world'),
                        array(
                            'id=12',
                            'datetime > NOW()')
                        );

请记住,这是一个没有任何安全检查的简单示例。建议使用类似PDO的东西。 此外,如果您正在寻找更强大和更灵活的东西,您应该查看ORM系统,例如Doctrine