[英]Mysql insert doesn't work when the input field has an apostrophe
我第一次遇到mysql问题。 我有一个输入字段,如
<input type="text" name="myfield" id="myfield" />
因此,当用户按下提交按钮时,我将获得php的值
$myval = $_POST['myfield'];
到目前为止一切都还可以。 如果此输入字段中的值包含撇号'
,例如:
<input type="text" name="myfield" id="myfield" value="Niko's Dog" />
mysql查询:
mysql_query ("INSERT INTO users (myfield) VALUES ('$myval')");
无法插入数据..
有什么意见吗? 我需要所有字符都有效。
尝试添加像斜杠一样
$myval = addslashes($myval);
mysql_query ("INSERT INTO users (myfield) VALUES ('".$myval."')");
您可以直接使用mysql_real_escape_string 。
mysql_query ("INSERT INTO users (myfield)
VALUES ('".mysql_real_escape_string($myval)."')");
当您没有逃避输入时会发生这种情况
INSERT INTO users (myfield)
VALUES ('Niko's Dog')
^-----------string end
您最好使用预准备语句 。 看到这里
查看使用准备语句 ,以避免转义问题以及恶意输入:
$result;
if ($stmt = $mysqli->prepare("INSERT INTO users (myfield) VALUES (?)") {
$stmt->bind_param("s", $myval);
$stmt->execute();
$stmt->bind_result($result);
$stmt->fetch();
echo "Your result is $result";
$stmt->close();
}
你也应该使用mysqli_*
,因为旧的mysql_*
函数已被弃用。
首先,永远不要相信用户输入! 在使用之前总是过滤它,因为用户是邪恶的(你必须在编写任何软件时这样思考)。
此外,您应该跳过使用弃用的mysql_*
而不是使用eg。 PDO
(或mysqli_*
如果你想使用更类似于mysql_*
东西)这很容易,并为你提供更多的可能性。 例如。 允许您使用prepared statements
。 使用它可以让您编写更安全,更好的软件。
只需将以下代码添加到服务器端文件中即可。 所以它会检查表单的每个字段。
foreach ($_POST as $key => $value) {
if(!is_array($value)){
$_POST[$key] = mysql_real_escape_string($value);
}
}
除了addslashes
和mysql_real_escape_string
您还可以使用str_replace
:
$myval=str_replace("\'","'","$myval");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.