0

我正在尝试将一组数据传递给更新查询,以更新客户记录。但是由于某种原因, ?success 页面显示我的详细信息已更新,但事实并非如此。如果我调试并回显

echo implode(', ', $update);
die();

我得到结果

mem_first_name='乔希',mem_last_name='史密斯',mem_email='j.smith@gmail.com',allow_email='0'

这对我来说看起来不错。这是我的 update_user 函数

function update_user($mem_id, $update_data) {
$update = array();
array_walk($update_data, 'array_sanitize');

foreach ($update_data as $field=>$data) {
    $update[] = '`' . $field . '` = \'' . $data . '\'';
}

mysql_query("UPDATE `members` SET " . implode(', ', $update) . " WHERE `mem_id` = '$mem_id'") or die(mysql_error());
}

还有我的 $update_data 数组

if (isset($_GET['success']) === true && empty($_GET['success']) === true) {
$message = 'Your details have been updated';
} else {
if (empty($_POST) === false && empty($errors) === true) {

    $update_data = array(
            'mem_first_name' => $_POST['mem_first_name'],
            'mem_last_name' => $_POST['mem_last_name'],
            'mem_email' => $_POST['mem_email'],
            'allow_email' => ($_POST['allow_email']) ? 1 : 0
    );

    update_user($session_member_id, $update_data);
    header('Location: settings.php?success');
    exit();
} else if (empty($errors) === false) {
    $message = output_errors($errors);
}
}

所以我已经计算出在我内爆后我失去了我的反引号,因此列名没有反引号

4

2 回答 2

0

这是某种错字(因此当然不是真正的问题)。
您正在为您的字段添加反引号

$update[] = '`' . $field . '`
             ^   here   

但是它们在调试时不存在。
因此,您要么运行要么发布错误代码,这使整个问题变得毫无意义。

于 2013-03-02T11:17:51.037 回答
0

检查与 db 的连接,以及表字段名称的拼写。我认为这段代码没有问题。

于 2013-03-02T11:27:42.330 回答