【问题标题】:Having trouble using MySQLi INSERT queries使用 MySQLi INSERT 查询时遇到问题
【发布时间】:2013-12-26 13:41:05
【问题描述】:

好的,所以我将我的网站从 MySQL 更新到 MySQLi,这意味着我必须重新编码一些数据库内容。

我在 php.net 上查看了如何使用 MySQLi 查询将数据插入到表中,并完全按照他们所说的去做,但没有运气。

这是我的连接变量:

$con = mysqli_connect("localhost", "username", "password", "database");

这是插入数据的代码:

mysqli_query($con, "INSERT INTO users ('user', 'pass', 'email') VALUES ('$user', '$pass', '$email')");

它不会回复任何错误,它只会将我带到预期的目标网页。但它实际上并没有将数据添加到表中。

有什么想法吗?

【问题讨论】:

  • 列名应该用``而不是''分隔
  • 你不必分隔列名
  • 太棒了。有效。谢谢大佬。
  • @demonking 你没有,但如果你这样做,它应该是正确的。
  • @Boaz 是的,你是对的,但它是可选的 ;)

标签: php mysqli


【解决方案1】:

如上所述,从列名中删除引号将解决您的问题:

mysqli_query($con, "INSERT INTO users (user, pass, email) VALUES ('$user', '$pass', '$email')");

但我也注意到您的脚本容易受到 SQL 注入攻击。 在MySQLi你可以在执行前prepare你的语句,这样你就可以确定没有人会在你的数据库中注入SQL命令。

如果你不想在执行前准备好每条sql语句,至少使用mysqli_real_escape_string函数,这也将保护你的系统免受SQL注入。像这样使用:

mysqli_query($con, "INSERT INTO users (user, pass, email) VALUES ('" . mysqli_real_escape_string($user) . "', '" . mysqli_real_escape_string($pass) . "', '" . mysqli_real_escape_string($email) . "')");

【讨论】:

    【解决方案2】:

    从列名中删除单引号

    mysqli_query($con, "INSERT INTO users (user, pass, email) VALUES ('$user', '$pass', '$email')");
    

    mysqli_query($con, "INSERT INTO users (`user`, `pass`, `email`) VALUES ('$user', '$pass', '$email')");
    

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      相关资源
      最近更新 更多