【发布时间】: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 解决方案所做的那样)。查询仍在编译并通过绑定传递参数。这里真正的危险是所述表名变量的来源。