【问题标题】:Turning a HTML form input into an PDO variable [closed]将 HTML 表单输入转换为 PDO 变量 [关闭]
【发布时间】:2015-12-10 13:49:19
【问题描述】:

我希望用户指定一个数字,这个数字将在我连接数据库时在我的 SQL 语句中使用。如果用户输入 5,我希望显示表中的前五行。

如果我写"SELECT * FROM TABLE WHERE ID <= 5" 它可以工作,但我的变量是从表单中获取的。当我使用$variable = $_POST['variable'] 并使用"SELECT * FROM TABLE WHERE ID <= $variable" 打印出来时,不会返回任何结果。这是为什么呢?

【问题讨论】:

  • 将您的完整代码连同您的表单一起发布
  • $_POST['variable'] 不为空吗? var_dump(它)
  • 不,因为当我回显它时,它会返回正确的值
  • 看不到 php 和表单就帮不上忙
  • 让我们完整的 sql 请求

标签: php sql pdo


【解决方案1】:

如果使用 PDO,则需要绑定该变量。

try {
    $conn = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // prepare sql and bind parameters
    $stmt = $conn->prepare("SELECT * FROM TABLE WHERE ID <= :id");

    // bind params
    $stmt->bindParam(":id", $_POST['variable']);
    $stmt->execute();

    // fetch with
    // $stmt->fetchAll(PDO::FETCH_ASSOC);

    echo "OK";
} catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}
$conn = null;

根据http://www.w3schools.com/php/php_mysql_prepared_statements.asp

【讨论】:

  • "if you use PDO" ... $conn = new mysqli 有点不对劲..
  • 对不起,我更正了:)
  • bind_param 这不是 PDO,它是 mysqli_ 语法。 PDO 语法是bindParam
  • 根据 w3schools.com/php/php_mysql_prepared_statements.asp - $stmt-&gt;bindParam(':firstname', $firstname); 而不是 $stmt-&gt;bind_param(':firstname', $firstname); - 如果您要引用该链接,请使用正确的语法。跨度>
  • 另外,您的回答完全错误。编辑:好的,你修好了。
【解决方案2】:

再次查看代码,只是一个简单的错字:

适用于:

$sql = 'SELECT * FROM sql WHERE id <= ' . $items;

在此之前我有

$sql = 'SELECT * FROM sql WHERE id <= $items';

【讨论】:

  • 第二个代码块可以用双引号正常工作,但是我建议您编辑您的问题以显示完整的 php 代码,然后您应该得到一个答案,该答案还将向您展示如何避免刺眼的 SQL您当前存在的注入漏洞
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 2016-09-03
  • 2011-06-04
  • 2014-03-24
相关资源
最近更新 更多