【问题标题】:$_GET with MySQL query$_GET 与 MySQL 查询
【发布时间】:2013-05-04 23:47:27
【问题描述】:

这是我的代码:

if ($_GET['u'] == $userid) {
$query = mysql_query("SELECT * FROM table WHERE uuserid='$userid'"); 
}

$userid 变量在脚本的其余部分中定义并且可以正常工作。
我的脚本是 script.php 并且可以正常工作(它是一个显示表 toondb 中的行的表)。 但是,我的表中有一个名为 uuserid 的列。我的用户 ID 是“1”。所以,如果你输入...

script.php?u=1

我需要它来显示数据库中 uuserid='$userid' 的行 当我输入 script.php?u=1 时它正在工作 但是,用户 620 在数据库中也有行,当我输入 脚本.php?u=620 我得到空白结果。 请帮忙?可能是上面的查询有问题:)

-- 更新: 我的变量实际上是我自己的用户 ID

$userid = ($vbulletin->userinfo['userid']);

因此,$userid 对我来说总是 1,因为我的 userid 是 1。呃,我现在是个傻瓜。 如果您输入 script.php?u=620.. 它将如何做到这一点

谢谢!

【问题讨论】:

  • 在弄清楚输入变量是哪个以及如何使用它之前,请阅读数据库转义,或者不太麻烦的 PDO 和绑定参数/准备好的语句。

标签: php mysql select get where


【解决方案1】:

这意味着只有在 url 参数 == 当前登录用户时才会执行查询,所以我会摆脱它。

<?php
//...

if (ctype_digit($_GET['u'])) {
    $query = mysql_query("SELECT * FROM toondb WHERE uuserid={$_GET['u']}"); 
}

?>

mysql 功能即将被弃用,所以开始使用 PDO :D

【讨论】:

  • 谢谢!这就像面包和黄油一样。不知道 PDO 是什么。但是,我确实使用 mysql_real_escape_string 附加到我所有的 $_POST 上。这是否足够好?
  • mysql_real_escape_string() 用于转义字符串,而不是数字,这就是我在上面没有使用它的原因,但是 PHP 可以将数字视为字符串,因此它可以工作。我猜你只是在编辑 vbulletin 源代码?
【解决方案2】:

我们缺少一段重要的代码:$userid 的值是如何计算的?我有一种感觉,由于您的 if,它甚至没有到达您的查询,即 $userid 始终为 1,因此任何不同于 1 的 $_GET['u'] 值都不会满足您的 if 条件,因此不计算查询。

【讨论】:

  • 天啊哇.. 我才意识到。 $userid 是我的用户名。因为变量是:$userid = ($vbulletin->userinfo['userid']);那么,当您执行 ToonDatabase.php?u=620 时,我该如何做到这一点,它会执行查询并在 WHERE 子句中添加 620?
  • 那么一个简单的解决方法是删除 if 并执行以下操作: $query = mysql_query("SELECT * FROM toondb WHERE uuserid='" . intval($_GET['u']) 。 "'");但请在走这条路之前阅读准备好的语句和 sql 注入。
猜你喜欢
  • 2012-11-29
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多