【问题标题】:Having problems after getting data from form and submiting to mysql database从表单获取数据并提交到mysql数据库后出现问题
【发布时间】:2016-05-10 03:58:43
【问题描述】:

当我从表单中检索数据并且需要在 mysql 数据库中提交该数据时,我得到了一些错误。我知道问题出在'" 字符中

我提交数据的php代码:

$sql = 'INSERT INTO news (id,name)
VALUES ("$id","$name")';

变量$name 从表单中获取。 $name= $_POST["name"];

所以,如果变量 $name 的值为

<p>
<span style="color: rgb(68, 68, 68); font-family: 'Open Sans', sans-serif; font-size: 16px; line-height: 26.672px;">1. Some text for example</span><br>
</p>

'" 之间存在问题时如何查询该文本

【问题讨论】:

  • 您的邮政编码在哪里!
  • 您的原始 SQL 将被解释为“INSERT INTO news (id,name) VALUES ("$id","$name")”。尝试这样的事情,$sql = "INSERT INTO news (id,name) VALUES ('$id','$name')"。您可能应该考虑准备和绑定您的变量。
  • $name 的值是多少?

标签: php html mysql forms


【解决方案1】:

这个怎么样?

if($stmt = mysqli_prepare($con,"INSERT INTO news(id,name) values (?,?)") ){     //$con = mysqli_connect(...
        mysqli_stmt_bind_param($stmt,'ss',$id,$name); // id and name as string
        mysqli_stmt_execute($stmt);
        mysqli_stmt_close($stmt);
    }
    mysqli_close($con);

【讨论】:

    【解决方案2】:

    在php中使用single quotes和双引号的区别在于,如果我们在echo语句中使用单引号,那么它将被视为一个字符串。如果我们在单引号内使用变量,那么它将作为变量名输出。

    $sql = "INSERT INTO news (id,name)
    VALUES ($id,'$name')";
    

    由于$name 是一个字符串,最好以这种方式编写代码。

    我知道问题出在 ' 和 " 字符中。//来自问题

    我希望,现在你知道问题出在哪里了。


    更新

    现在正如我们的朋友在评论部分所说,为了避免sql injection,其中一种方法是使用 prepared Statements with mySQLi
    使用上述方法,您的代码将如下所示。

    $name = $_GET['username'];
    $id = $_GET['id'];
    
    if ($stmt = $mysqli->prepare("INSERT INTO tbl_users (id, name) VALUES (?, ?)")) {
    
        // Bind the variables to the parameter as strings. 
        $stmt->bind_param("ss", $id, $name);
    
        // Execute the statement.
        $stmt->execute();
    
        // Close the prepared statement.
        $stmt->close();
    
    }
    

    了解更多 check here
    RiggsFolly 的精彩参考,
    SQL injection that gets around mysql_real_escape_string()
    http://bobby-tables.com/
    真的很棒,谢谢 RiggsFolly

    【讨论】:

    • 您不需要在该查询中使用 . 连接 $sql = "INSERT INTO news (id,name) VALUES ($id,'$name')"; 就可以了
    • 这也对SQL Injection开放
    • 错了,错了……看看Little Bobby Tables甚至if you are escaping inputs, its not safe!发生了什么
    • 请不要到处告诉人们使用使他们容易受到 SQL 注入攻击的代码。很多访问者经验不足,不知道其中的区别,会盲目使用代码。
    猜你喜欢
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2023-03-15
    • 2020-10-29
    • 2015-08-26
    相关资源
    最近更新 更多