【问题标题】:Form Variable in PDO QueryPDO 查询中的表单变量
【发布时间】:2011-04-28 23:15:23
【问题描述】:

位于我页面上的表单的提交按钮会触发下面的代码,但我不确定如何将名为“amount”的文本框的数值保存到我可以在下面的 PDO 查询中使用的 php 变量中。我不确定语法。提前致谢!

     if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) {
$amount = isset($_POST['amount']) ? $_POST['amount'] : null;
if (null != $amount) {

$user = 'user';
$pass = 'pass';
$pdo = new PDO('mysql:host=localhost;dbname=dbname', $user, $pass);
session_start();
$tablename = $_SESSION['MM_Username'];
$UpdateQuery = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `status` = 1', $tablename);
$stmt = $pdo->prepare($UpdateQuery);
$stmt->bindParam('amount', $amount);
$stmt->execute();
}
}

删除了 db_select 行并验证了 SESSION 变量 MM_Username 实际上设置正确。无论如何,SQL 可以吐出更详细的错误报告吗?当我像上面那样运行代码时,我没有收到任何错误,但是它根本不起作用。

【问题讨论】:

  • 丢失mysql_select_db 行。您还应该确保$_SESSION['MM_Username'] 设置正确。您收到了哪些错误消息(如果有)?
  • 虽然表名应该是安全的,但以这种方式将数据添加到查询中仍然是非常糟糕且非常危险的做法。您会立即失去所有 PDO 福利。我会先用另一个查询检查表是否存在。或者,更好的是,根本不使用以用户命名的表。你的数据结构太糟糕了。
  • 完全同意数据结构可以大大改进。不会说你失去了所有 PDO 的好处,因为你有一个可变的表名。考虑何时可以为表名添加前缀(就像大多数 PHP CMS 解决方案所做的那样)。查询仍在编译并通过绑定传递参数。这里真正的危险是所述表名变量的来源。

标签: php mysql forms pdo


【解决方案1】:

编辑:完全修改答案,通过异常报告错误

session_start();
if (isset($_POST['MM_update']) && $_POST['MM_update'] == 'form1') {
    $amount = isset($_POST['amount']) ? $_POST['amount'] : null;
    if (null === $amount) {
        throw new Exception('Amount not set');
    }
    $user = 'user';
    $pass = 'pass';
    if (empty($_SESSION['MM_Username'])) {
        throw new Exception('Username table not set in session');
    }
    $pdo = new PDO('mysql:host=localhost;dbname=dbname', $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `status` = 1', $_SESSION['MM_Username']);
    $stmt = $pdo->prepare($query);
    $stmt->bindParam('amount', $amount);
    $stmt->execute();
} else {
    echo 'Nothing to do';
}

【讨论】:

  • Ok 会尝试这两种可能性并回复您。
  • 菲尔终于搞定了!!由于在同一页面上有两个具有相同名称的表单,因此未正确设置表单变量数量。我非常感谢你今晚的帮助。有一个美好的夜晚!
  • 仅供参考 - 表单“名称”属性是无用的。
  • 虽然表名应该是安全的,但以这种方式将数据添加到查询中仍然是非常糟糕且非常危险的做法。您会立即失去所有 PDO 福利。我会先用另一个查询检查表是否存在。或者,更好的是,根本不使用命名表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
相关资源
最近更新 更多