【问题标题】:PHP string variables not entering into mysql databasePHP字符串变量未进入mysql数据库
【发布时间】:2014-02-13 19:37:45
【问题描述】:

这行代码有一些问题:

$usersql= mysql_query("INSERT INTO tp_request (user_id, week_no, floor, code) VALUES ($insertuser, $week, $floor, $code)");

变量值如下:

$insertuser = 1;
$week = 4;
$floor = "First";
$code = "ABC123";

$insertuser 和 $week 一起使用时可以毫无问题地进入数据库没有其他两个变量。但是,当使用 $floor 和 $code 时,不会将任何内容输入到数据库中。它们都分别正确地回显为“First”和“ABC123”。

数据库中的字段已作为 Text 和 VarChar 进行了尝试,但它不适用于其中任何一个。

关于如何让 $floor 和 $code 在这里工作有什么想法吗?

【问题讨论】:

  • stings 需要引用
  • 使用类似 mysqli 和prepared statements 之类的东西会自动为你处理这个问题并清理你的输入。
  • 所以应该是:INSERT INTO tp_request (user_id, week_no, 'floor', 'code')?
  • 如果这段代码不是难以置信的不安全和可破解的,你所有的问题都会得到解决。 1. 不要使用mysql_。这是一个旧的扩展,它已被弃用。请改用mysqli_PDO。 2. 使用准备好的语句和绑定变量,或者至少使用mysqli_real_escape_string来避免所有这些问题。
  • Stackoverflow 需要自动拒绝任何带有mysql_*() 且链接到PDOmysqli 的帖子

标签: php mysql variables input


【解决方案1】:

像这样重写

  $usersql= mysql_query("INSERT INTO `tp_request` (`user_id`, `week_no`, `floor`, `code`) VALUES ('$insertuser', '$week', '$floor', $code)");

旁注:您需要停止使用 mysql_* 函数,因为它们已被弃用。切换到 PreparedStatements。

【讨论】:

  • 为什么要引用整数以及为什么要使用 `` 智能引号?
  • +1 表示旁注。 PDO 更安全,除非您使用 SQL 注入。
  • 我真的认为像这样“修复”代码实际上是一件坏事,因为当它被破坏时,它不是一个可以用来破解您网站的向量。这就像“我的枪卡住了,帮我修好它,这样我就可以在我的脚上开枪了!”
【解决方案2】:

试试这个,添加了' 来包裹变量$floor$code,因为它包含字符串,

$usersql= mysql_query("INSERT INTO tp_request (user_id, week_no, floor, code) 
 VALUES ($insertuser, $week, '$floor', '$code')");

注意:使用 mysqli_* 函数或 PDO 而不是使用 mysql_* 函数(已弃用)

【讨论】:

  • 打败我。 @user910930 您不将字符串括在引号中,从而破坏了 SQL 语法。
  • 你为什么要引用整数?
  • @dagon 为什么重要?从技术上讲,它不是必需的,因为它们是整数,但如果它们不是整数,这只是一个好习惯。
  • 这是不好的做法,因为它们不是。任何未来的程序员看到这段代码都会觉得它们是字符串,并按原样处理它们,而实际上它们是整数。
  • @kcdwayne 如果您输入一个字符串并且它假定一个 INT,您的数据库将会失败,所以它不会更好。如果有的话,请不要使用引号,并确保在将其粘贴到查询之前将其转换为 int。
【解决方案3】:
 $usersql= mysql_query("INSERT INTO tp_request (user_id, week_no, floor, code) VALUES ($insertuser, $week, '$floor', '$code')");

【讨论】:

    【解决方案4】:

    在字符串变量周围的 sql 子句中添加单引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-28
      • 2016-05-30
      • 2015-11-08
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      相关资源
      最近更新 更多