【问题标题】:PHP variable into mySQL table: not working?PHP 变量进入 mySQL 表:不工作?
【发布时间】:2026-02-15 05:20:04
【问题描述】:

这与我不久前提出的问题相似,但似乎没有得到任何答案,所以我会再试一次。

我有一个您登录的预订系统,您的用户名存储在一个名为 $_COOKIE['ID_my_site'] 的 cookie 中。我有一个脚本在用户预订了他们的航班后运行,它将所有详细信息存储到一个表中(名为OABS_customers),它工作正常,但是不起作用的一行是username 行,它添加$_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')";

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

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

【问题讨论】:

  • 当你把$_COOKIE['ID_my_site']赋值给$user时,它的值是多少?
  • 当你 echo $user 时,结果是什么?
  • 标准 php/sql 调试机制:打印查询并抽查明显错误。获取查询并手动运行它。还是找不到问题?确保您选择了正确的数据库并且用户具有正确的权限。
  • 调试 $query 变量并尝试通过添加 isset 来验证 $user。谢谢
  • 以防万一您的查询在函数内并且 $user 变量在函数外部全局声明,您需要确保使用全局 $user 将其拉入函数中;

标签: php mysql database variables


【解决方案1】:

从不将未转义的用户生成字符串放入 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) ."')");

【讨论】:

  • +1 用于强调 SQL 注入的重要性。但是,请记住,mysql 扩展和mysql_ 函数是being deprecated,应该使用并推荐使用mysqli 或PDO。
  • 你是对的。使用mysqli_,您可以使用准备好的语句,而mysql_real_escape_string() 已过时。
  • 非常感谢,它现在终于可以工作了,当然更安全了。再次感谢您!
【解决方案2】:

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

【讨论】: