灵活的功能,用于从PHP更新数据库记录


Flexible function for updating DB records from PHP

有没有办法使下面给定的代码可以对不同的表重用,例如使用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 语句?

您可以将

代码转换为可重用的函数。

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"。 假设这些是 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;
}

这样的事情应该可以工作:

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