【问题标题】:sanitize using {$_GET['id']} doesn't display mysql info使用 {$_GET['id']} 清理不显示 mysql 信息
【发布时间】:2013-11-10 00:43:34
【问题描述】:

我正在尝试清理我的 $_GET 输入,但由于某种原因,mysql 不会从数据库中检索数据。如果我这样做:

$user = mysqli_real_escape_string($connection, $_GET['id']);

//execute query to call user info
$query = "SELECT user
FROM company
WHERE user={$_GET['id']} ";

这将起作用并显示结果;但是,如果我这样做:

$user = mysqli_real_escape_string($connection, $_GET['id']);

//execute query to call user info
$query = "SELECT user
FROM company
WHERE user= '$user' ";

我没有收到数据库错误,但没有任何显示。

我不是在消毒吗?这里发生了什么?请帮忙!

【问题讨论】:

  • 您遇到的错误是什么?
  • 调试! var_dump 所有相关值!阅读错误信息!告诉我们两个!
  • 在第二个查询中,您在 $user 周围使用了一些额外的撇号 (')。他们在 {$_GET['id']} 附近不见了。
  • 在第二个示例中,您是否将 $_GET['id'] 分配给变量 $user?
  • var_dump 给我:string(72) "SELECT user FROM user WHERE user='\"user\"' "

标签: php mysql sanitization


【解决方案1】:

避免这种情况的最佳方法是使用准备好的查询: How can I prevent SQL injection in PHP?

非常简单有效:

$q = $db->prepare('SELECT user FROM company WHERE user=?');
$q->bind_param('i', $user);

$q->execute();

$result = $q->get_result();
while ($row = $result->fetch_assoc()) {
    // do something with $row
}

这很酷,因为它是 OOP 且安全。一些链接:

【讨论】:

  • 您好,非常感谢您的帮助。我是 PHP 新手,对准备好的语句不太熟悉,所以链接很有帮助。迭代您的示例时出现此错误:致命错误:调用非对象上的成员函数 fetch_assoc()
  • 连接数据库的地方使用这个:$db = new mysqli('localhost', 'my_user', 'my_password', 'my_db');。当然,用您的用户名、密码和数据库名称填充这些占位符。我认为您必须完全重建与 DB 的连接。检查“连接到数据库”以获取更多详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多