【问题标题】:PHP form will not postPHP 表单不会发布
【发布时间】:2010-08-30 16:22:29
【问题描述】:

我刚刚实现了 mysql_real_escape_string(),现在我的脚本不会写入数据库。在添加 mysql_real_escape_string() 之前一切正常:

有什么想法吗??

$name = mysql_real_escape_string($_POST['name']);
$description = mysql_real_escape_string($_POST['description']);
$custid = mysql_real_escape_string($_SESSION['customerid']);

mysql_send("INSERT INTO list 
              SET id = '',  
                  name = '$name', 
                  description = '$description', 
                  custid = '$custid' ");

【问题讨论】:

  • 什么是mysql_send?有没有报错?查询在发送到 mysql 之前是什么样子(尝试回显)?
  • 调试提示:将 SQL 语句放在一个变量中,即$sql = "INSERT INTO list SET id = '', name = '$name'" 等...然后是echo $sql(或die($sql))。这可能会阐明导致问题的原因。另外,你是如何连接到数据库的,你自己还是通过某种第 3 方 api?如果是后者,也许 api 推荐了一种转义数据的方法。

标签: php mysql forms post


【解决方案1】:

mysql_send 函数是什么?
如果改成mysql_query()怎么办;

【讨论】:

  • OP 说它一直在工作,直到他开始使用 mysql_real_escape_string。他没有说他改了那行代码。
【解决方案2】:

应该很容易弄清楚发生了什么。

首先,不要将您正在构建的查询发送到数据库,而是将其回显(或记录),然后查看您实际发送到数据库的内容。

如果这还不够明显,请查看 mysql_error() 的内容。

【讨论】:

    【解决方案3】:

    mysql_real_escape_string 应该有一个数据库连接作为第二个参数传递,因为它询问数据库需要转义哪些字符。

    $connection = mysql_connect(HOST, USERNAME, PASSWORD);
    $cleanstring = mysql_real_escape_string("my string", $connection);
    

    【讨论】:

    • @blockhead,我正要这么说。你可能对 mysqli_real_escape_string 感到困惑,它需要它的第一个参数是一个到数据库的链接。
    • 在某些情况下它会变得混乱(例如,如果您打开了多个连接),我已经多次遇到此问题。我总是通过一个连接来确保字符串不会被截断/删除。
    • 你好MySQLi,很高兴你一直带着数据库连接(OO风格)
    【解决方案4】:

    理解如何使用某些功能的典型失败... 您只是在原始输入数据上使用 mysql_real_escape_string 。你听说过消毒/验证输入吗? mysql_real_escape_string 对数字没有意义。如果您已将变量验证为数字,则无需对其进行转义。

    mysql_send 是 mysql_query 的别名,对吗? 使用调试代码,在mysql_send(...)之后添加echo mysql_error();

    【讨论】:

      【解决方案5】:
             mysql_connect("localhost", "username", "password") or die(mysql_error());
             mysql_select_db("database") or die(mysql_error());
             $name = mysql_real_escape_string($_POST['name']);
             $description = mysql_real_escape_string($_POST['description']);   
             $custid = mysql_real_escape_string($_SESSION['customerid']);
      
             //If you doing Update use this code
             mysql_query("UPDATE list SET id = '', name = '$name', description = '$description' WHERE custid = '$custid' ") or die(mysql_error());
             //OR if you doing Insert use this  code.
             mysql_query("INSERT INTO list(name, description, custid) VALUES('$name', '$description', '$custid')") or die(mysql_error());
             //If custid is Integer type user $custid instead of '$custid'.                 
      

      如果您要根据 custid 更新列表中的记录,请使用 UPDATE 命令,或者如果您要将记录插入列表中,请使用 INSERT 命令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-26
        • 2012-10-29
        • 2012-12-02
        • 2012-01-19
        • 1970-01-01
        • 2021-03-22
        • 2011-01-15
        相关资源
        最近更新 更多