当我从表单中检索数据时,当我需要在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>
当'
和"
答案 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);