我正在尝试使用会话中的数据更新事务表中的列。我将会话数据存储如下
$session_mem_id = $_SESSION['mem_id'];
$member_data = member_data($session_mem_id, 'mem_id', 'mem_email', 'mem_password', 'mem_address', 'mem_city', 'mem_postcode', 'mem_county', 'mem_country', 'mem_first_name', 'mem_last_name', 'password_recover', 'allow_email', 'admin', 'mem_tel');
我使用这些数据更新我的表格如下
function createTransaction($member_data){
// Insert into the transactions table
$query1 = mysql_query("INSERT INTO `transactions` (mem_id, OrderDate, ship_phone, ship_address, ship_city, ship_county, ship_postcode, ship_country) VALUES('{$_SESSION['mem_id']}', NOW(), '{$member_data['mem_tel']}', '{$member_data['mem_address']}', '{$member_data['mem_city']}', '{$member_data['mem_county']}', '{$member_data['mem_postcode']}', '{$member_data['mem_country']}')") or die(mysql_error());
}
我没有收到错误,但我的表格中唯一更新的列是 mem_id , orderdate 和 OrderId 作为其 AUTO_INCREMENT 即可。没有数据解析存储在我的$member_data
中
如果我var_dump($ member_data)我得到以下
array(14) { ["mem_id"]=> string(2) "11" ["mem_email"]=> string(26) "j.hfbgb92@gmail.com" ["mem_password"]=> string(8) "password" ["mem_address"]=> string(16) "54 bvcbv drive" ["mem_city"]=> string(9) "Mggbone" ["mem_postcode"]=> string(8) "gb14 4gb" ["mem_county"]=> string(4) "Kent" ["mem_country"]=> string(14) "United Kingdom" ["mem_first_name"]=> string(4) "Bob" ["mem_last_name"]=> string(12) "Smith" ["password_recover"]=> string(1) "0" ["allow_email"]=> string(1) "1" ["admin"]=> string(1) "1" ["mem_tel"]=> string(11) "07900186785" }
我的member_data函数是 function member_data($ mem_id){ $ data = array(); $ mem_id =(int)$ mem_id;
$func_num_args = func_num_args();
$func_get_args = func_get_args();
if($func_num_args > 1) {
unset ($func_get_args[0]);
$fields = '`' . implode('`, `', $func_get_args) . '`';
$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM members WHERE mem_id = '$mem_id'"));
return $data;
}
}
答案 0 :(得分:1)
问题可能是会话尚未启动。
在哪种情况下:
session_start();
在输出任何内容之前将解决问题。
尝试输出$_SESSION['mem_id'];
的内容,然后将其存储在数据库中以确保设置。
此外,还请确保在将变量存储到数据库之前将其转义。
所以你的变量赋值应如下所示:
$session_mem_id = mysql_real_escape_string($_SESSION['mem_id']);
这是针对SQL injection attack的安全预防措施。
我希望这会有所帮助。
答案 1 :(得分:0)
我会尝试重写这样的查询:
$query = sprintf("INSERT INTO `transactions` (mem_id, OrderDate, ship_phone, ship_address, ship_city, ship_county, ship_postcode, ship_country) VALUES('%s','%s','%s','%s','%s','%s','%s','%s')", $_SESSION['mem_id'], NOW(), $member_data['mem_tel'], $member_data['mem_address'], $member_data['mem_city'], $member_data['mem_county'], $member_data['mem_postcode'], $member_data['mem_country']);
$query1 = mysql_query($query) or die(mysql_error());
您还可以在echo
开头后插入$query
并检查您的查询语句是否正确。