0

这类似于我前一段时间提出的问题,但是这似乎没有吸引任何答案,所以我会再试一次。

我有一个您登录的预订系统,您的用户名存储在一个名为 的 cookie 中$_COOKIE['ID_my_site']。我有一个脚本,在用户预订了他们的航班后运行,它将所有详细信息存储到一个OABS_customersusername$_COOKIE['ID_my_site']名为

该表的结构如下:

名称 类型(长度) 空 默认

name varchar(60) 没有 noname
address1 varchar(60) 没有 noaddress
address2 varchar(60) 无 noaddress2
县 varchar(60) 无县
邮政编码 varchar(32) 无邮政编码
客户 tinyint(4) 否       
席位 varchar(11) 否 0
数字 tinyint(4) 否 0
类 varchar(11) 没有 noclass
用户名 varchar(60) 没有 nousername

所以就像我说的,一切正常,但username列,它只是提供了默认值nousername. 这是我正在使用的代码;

$query = "INSERT INTO OABS_customers (username) VALUES ('$user')";

where $user = $_COOKIE['ID_my_site'](在上述脚本之前定义)。

如果有人可以帮助解决这个问题,我将不胜感激。

4

2 回答 2

2

永远不要将未转义的、用户生成的字符串放入 SQL 查询中。cookie 可能会被一些邪恶的用户更改,这会导致 SQL 注入。用于mysql_real_escape_string($user)转义字符串。

确保$_COOKIE['ID_my_site']不为空

mysql_query("INSERT INTO OABS_customers (username) VALUES ('". mysql_real_escape_string($user) ."')");
于 2012-05-17T18:45:18.330 回答
0

MySQL查询一切都很好......

mysql> INSERT INTO data (username) VALUES ('random');
Query OK, 1 row affected (0.08 sec)

mysql> select * from data;
+----+----------+
| id | username |
+----+----------+
|  1 | random   |
+----+----------+
1 row in set (0.00 sec)

看起来$COOKIE值是空的,当您执行查询时,PHP 会将空字符串分配给username值。MySQL 看到传递了空值并将默认值写入username

于 2012-05-17T18:38:58.287 回答