【问题标题】:Saving form fields to sql database - only saving numbers?将表单字段保存到 sql 数据库 - 只保存数字?
【发布时间】:2012-08-09 22:18:51
【问题描述】:

这应该很简单,但它让我发疯了。我正在尝试从某些表单字段将一些值插入数据库,但只保存小数。我很困惑。

例如,这会从表单字段中回显正确的值,所以我知道这些值正在传递...

echo "Trying to insert $posttime, $name, $agency, $message"; 
// The above correctly outputs this: Trying to insert 1344548784, Mike, Test, Test 

但下面的 SQL 查询仅在我在文本字段中使用数字时才有效,其他任何方法都无效。 (我是用phpmyadmin来确认的)

mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES ($posttime, $name, $agency, $message)");

作为测试,当我对值进行硬编码时,此查询确实有效。我很困惑……

mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES (1344548784, 'Mike', 'Test', 'Test')");

【问题讨论】:

    标签: php sql


    【解决方案1】:

    在插入数据时用引号将您的文本字段封装起来。即使它们是 PHP 中的变量,您也需要告诉数据库它们是字符串 - 这是用引号完成的。:

    mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES ($posttime, '$name', '$agency', '$message')");
    

    另外,mysql_* 函数确实有点过时了,你真的应该考虑迁移到 PDO 或 mysqli。

    【讨论】:

      【解决方案2】:

      您缺少的引号:

      mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES ('$posttime', '$name', '$agency', '$message')")
      

      【讨论】:

        【解决方案3】:

        首先:停止使用已弃用的 mysql 扩展!切换到 PDO 或 mysqli。

        使用其中一种技术,您可以使用准备好的语句,并将您的值作为参数传递。它们还允许使用面向对象的编程风格。

        例子:

        // Assuming $link is a valid connection resource
        
        // Prepare statement
        $statement = mysqli_prepare($link, "INSERT INTO mytable (id, from_name, from_agency, message) VALUES (?, ?, ?, ?)");
        
        // Bind parameters
        mysqli_stmt_bind_param($statement, 'i', $posttime);
        mysqli_stmt_bind_param($statement, 's', $name);
        mysqli_stmt_bind_param($statement, 's', $agency);
        mysqli_stmt_bind_param($statement, 's', $message);
        
        // Execute
        $result = mysqli_stmt_execute($statement);
        

        这样您就不会受到 SQL 注入的攻击。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-18
          • 2020-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多