0

我自己在努力写这个,所以我会说我知道我需要做什么以及我已经做了什么。

基于两个 $_GET[] 变量,我需要查询数据库。这些值为我提供了表名和位置名称。从这个位置字段名称,我需要推断整行。

因此,我用这些数据查询数据库,但是当我尝试获取并打印它时,什么也没有发生。我需要整行的数据(在数组中?)。

我知道我的代码很丑陋。并且可能容易受到 MySQL 注入的影响,但在我担心之前,我宁愿让我的 PHP 正确地将行放入数组中。

到目前为止我的粗略代码:

$company = strtolower($_GET['company'] . '_a_in_m2f');
$company = mysqli_real_escape_string($mysqli, $company);

$stmt = $mysqli->prepare("SELECT * FROM " . $company ." WHERE `name` = '?'");
$stmt->bind_param('s', $stop);

$stop = $_GET['stop'];

$stmt->execute();

$stmt->bind_result($therow);

while ($stmt->fetch()) {
    printf("%s %s \n", $therow);
}

谢谢

4

3 回答 3

1

这里有几个问题:

  1. 您没有引用要绑定的变量(如前所述...);
  2. 您不要转义表名,而是应该根据白名单检查它,并在必要时用反引号引用它;
  3. 您不会将结果绑定到数组,而是绑定到单个变量。fetch_row()在这种情况下,您最好从结果中获取行。
于 2013-06-18T16:42:04.057 回答
1

从占位符中删除引号:

$stmt = $mysqli->prepare("SELECT * FROM " . $company ." WHERE `name` = ?");
                                                                       ^--no quotes

准备好的语句中占位符/命名参数的全部意义在于消除您自己做这些事情的需要。

在内部,数据库库将执行以下操作:

$safe = "'" . escape($nasty_unsafe_data) . "'"

所以最终的查询最终看起来像

... WHERE `name` = ''$safe''

(不是真的,这只是为了说明这个过程)。

于 2013-06-18T16:36:55.263 回答
0

您不需要?使用引号绑定。'?'简单地删除引号?

于 2013-06-18T16:37:31.227 回答