从表单获取数据并提交到mysql数据库后出现问题

时间:2016-05-09 18:34:21

标签: php html mysql forms

当我从表单中检索数据时,当我需要在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>

'"

之间出现问题时,如何查询该文字

2 个答案:

答案 0 :(得分:1)

  

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

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

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

  

我知道问题出在&#39;和&#34;字符。 //来自问题

我希望,现在你知道问题所在。

更新

正如我们的朋友在评论部分中所说,为了避免使用sql injection,有几种方法之一是使用使用mySQLi准备好的语句
使用Above方法,您的代码如下所示。

$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

答案 1 :(得分: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);