0

以下に示すコードをさまざまなテーブルで再利用できるようにする方法はあります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'; 
    }
?>

更新:列名aprioriがわからない場合はどうなりますか?柔軟なUPDATEステートメントを作成するにはどうすればよいですか?

4

2 に答える 2

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;
}
于 2012-05-26T17:34:09.310 に答える
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のようなものが推奨されます。さらに、より堅牢で柔軟なものを探している場合は、Doctrineなどの ORM システムを検討する必要があります。

于 2012-05-26T17:53:54.227 に答える