【问题标题】:Insert function not wrking on mysql 5.7插入功能在 mysql 5.7 上不起作用
【发布时间】:2017-01-23 20:06:25
【问题描述】:

所以这个问题显然和mysql服务器版本有关。 这个php函数:

mysql_query("INSERT INTO `x_servers_pay`(`service_type`, `ip`, `time_created`, `amount`, `currency`,`receiver_email`) VALUES ('boost','".mysql_real_escape_string($ip)."','".time()."','".$price_boost."','".$currency_boost."','".$receiver_email."')");

在 mysql 5.5.49 和 5.5.41 上完美运行,但似乎不适用于 mysql server 5.7。还有另一个更简单的函数,它也是 INSERT,它可以工作,但那个特定的函数不能,我完全不知道为什么。

我在 php-fpm 日志文件夹或 nginx 日志文件夹中找不到任何错误日志。

任何人都可以提出建议吗?

【问题讨论】:

  • 介意去掉标题中的大写字母吗?这叫“大喊大叫”,没人喜欢被人骂;你?你去 ;-) 编辑:谢谢 ;-)
  • 您的服务器可能不再支持 mysql_ api
  • 你检查了mysql_error()吗?我真的建议你切换到PDOmysqli。您对 SQL 注入持开放态度,并且 mysql_* 函数在 PHP7 中被删除并在以前的版本中被弃用。
  • php.net/manual/en/function.error-reporting.php 回退了什么?和mysql_error() 查询?
  • “完美工作”在这里是主观的。这看起来像是一些严重有问题的代码。正如其他人所指出的那样,但要重申,因为它很重要,,停止使用mysql_query 并至少转向 PDO。

标签: php mysql insert sql-insert


【解决方案1】:

“谢谢大家,刚刚意识到我的错误。mysql_error() 没有包含在字符串中。现在它给了我:字段'time_payed'没有默认值”

这是因为 '".time()."' 你引用了一个函数并被视为字符串文字。

你需要做的是先给它分配一个变量:

$time = time();

然后在查询中使用该变量。

VALUES ('boost','".mysql_real_escape_string($ip)."','$time', ...

并为该列设置默认值。

您还应该开始使用mysqli_ 或 PDO API(带有准备好的语句)。自 PHP 7 起,mysql_ API 已弃用并被删除。

即使mysql_real_escape_string() 也可以注入。

阅读SQL injection that gets around mysql_real_escape_string()

【讨论】:

  • 感谢您的意见!我会考虑改用 PDO。
  • @MaximK.Magnes 不客气,并在准备好的声明中使用它。单独的 PDO 并不能防止没有一个 sql 注入。
  • @MaximK.Magnes 甚至 mysql_real_escape_string() 也可以注射。阅读stackoverflow.com/questions/5741187/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 2017-10-11
  • 1970-01-01
相关资源
最近更新 更多