PDO使用数组更新1列多行

时间:2014-09-15 12:51:41

标签: php pdo

我正在努力研究一种更新我wcx_options表的一列的好方法。

新数据很好地发送到控制器,但我的功能根本不起作用。

我假设我可以通过option_id使用数组中的值来循环遍历每一列。

数据库:

wcx_options Database

我将option_value列的新信息通过jQuery AJAX Call更新到控制器,然后控制器调用backend class中的函数。

到目前为止,我有以下代码:

if(isset($_POST['selector'])) {

    if($_POST['selector'] == 'general') {
        if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' && isset($_POST['token']) 
        && $_POST['token'] === $_SESSION['token']){

            $site_name = $_POST['sitename'];
            $site_url = $_POST['siteurl'];
            $site_logo = $_POST['sitelogo'];
            $site_tagline = $_POST['sitetagline'];
            $site_description = $_POST['sitedescription'];
            $site_admin = $_POST['siteadmin'];
            $admin_email = $_POST['adminemail'];
            $contact_info = $_POST['contactinfo'];
            $site_disclaimer = $_POST['sitedisclaimer'];
            $TimeZone = $_POST['TimeZone'];

            $options = array($site_name, $site_url, $site_logo, $site_tagline, $site_description, $site_admin, $admin_email,$contact_info, $site_disclaimer, $TimeZone);

            // Send the new data as an array to the update function
            $backend->updateGeneralSettings($options);
        }
        else {
            $_SESSION['status'] = '<div class="error">There was a Problem Updating the General Settings</div>';
        }
    }
}

这就是我迄今为止的功能(它不起作用):

public function updateGeneralSettings($options) {
    $i = 1;
    foreach($options as $option_value) {
        $where = array('option_id' => $i);
        $this->queryIt("UPDATE wcx_options SET option_value='$option_value' WHERE option_id='$where'");
    $i++;
    }
    if($this->execute()) {
        $_SESSION['success'] = 'Updated General Settings Successfully';
    }
}

2 个答案:

答案 0 :(得分:1)

使用给定的DB布局我建议使用db字段名将数据组织为辅助数组,例如:

$option = array(
        'site_name' => $_POST['sitename'],
        'site_url' => $_POST['siteurl'],
        // etc.
        'timeZone' => $_POST['TimeZone']
);

而不是使用查询中的键:

public function updateGeneralSettings($options) {
    foreach($options as $key => $value) {
        $this->queryIt("UPDATE wcx_options SET option_value='$value' WHERE option_name='$key'");
    if($this->execute()) {
        $_SESSION['success'] = 'Updated General Settings Successfully';
    }
 }

}

(但是,您确定,您不希望将所有选项放在一行中吗?)

答案 1 :(得分:0)

更改您的查询,您尝试将数组用作where条件。在您使用的语法中,它不会起作用。只需将计数器用作where条件,而不是定义$where变量。试试这个:

public function updateGeneralSettings($options) {
    $i = 1;
    foreach($options as $option_value) {
        $this->queryIt("UPDATE wcx_options SET option_value='$option_value' WHERE option_id='$i'");
        $i++;
    }
    if($this->execute()) {
        $_SESSION['success'] = 'Updated General Settings Successfully';
    }
}