0

我正在尝试允许用户更新他们的个人资料,并且我使用以下功能来这样做:

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

            foreach($update_data as $field=>$data){ //loop through update data in update_info.php
                $update[] = '`' . $field . '` = \'' . $data . '\''; 
            }
            //print_r($update);
            //die();
            mysql_query("UPDATE `oddjob` SET " . implode(', ', $update). " WHERE `MemberID` = $session_MemberID") or die (mysql_error());

}

if (logged_in() ===true) {
    $session_MemberID = $_SESSION['MemberID'];//grabbing value from login
    $user_data= user_data($session_MemberID,'MemberID','Name','Address','Postcode','DOB','Mobile','CoinsAvailable','Email','Password','RepeatPassword','OddJobName','Description','DaysAvailable','profile');
    exit();
    }

这是更新页面。(仅相关代码)

if (isset($_POST['OddJobName']) && isset($_POST['Description']) && isset($_POST['DaysAvailable']) && empty($errors) === true){//if (empty($_POST) === false && empty($errors) === true) { 
            $daysavailable='';
            foreach ($_POST['DaysAvailable'] as $value)
            {

            $daysavailable .=$value." ";
            }

            $update_data = array (
                'MemberID'      => $MemberID,
                'OddJobName'    => $_POST['OddJobName'],
                'Description'   => $_POST['Description'],
                'DaysAvailable' => $daysavailable, 

                );

                update_user ($update_data);

                if(success){
                 header('Location: member.php?username='.$username);
                 exit ();
                }
            } else if (empty($errors) === false){
                //otherwise output errors
                echo output_errors($errors);
            }


?>

当我为用户输入新信息时,出现以下错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

当我打印出来时,$update我得到:

Array ( [0] => `MemberID` = '30' [1] => `OddJobName` = 'test' [2] => `Description` = 'test' [3] => `DaysAvailable` = 'Friday ' )

这似乎很好,所以我不确定我的查询有什么问题。如果我将更新查询放入 phpmyadmin 中,例如:

UPDATE `oddjob` SET `OddJobName`= test,`Description`=test,`DaysAvailable`=Friday, WHERE `MemberID` = 30

我得到错误

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE MemberID = 30' at line 1

(oddjob表中的MemberID是外键,MemberID是member表中的主键。)

我不擅长这种 SQL 的东西......正如你所知道的,如果可以的话,请提供帮助。

4

1 回答 1

1

首先: 请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

关于您的问题,您正在使用global $session_MemberID,即使您的$update_data阵列中已经有该 ID。我打赌$session_MemberID是空的,这就是你的第一个查询失败的原因。尝试在您的代码中使用此查询:

$sql = "UPDATE `oddjob` SET " . implode(', ', $update). " WHERE `MemberID` = ".intval($update['MemberID']);

关于 phpMyAdmin 查询,有一个错误,前面有一个逗号WHERE,请尝试使用此查询:

UPDATE `oddjob` SET `OddJobName`= 'test',`Description`='test',`DaysAvailable`='Friday' WHERE `MemberID` = 30
于 2013-04-07T14:06:00.483 回答