我第一次遇到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')");
无法插入数据..
有什么意见吗?我需要所有字符都有效。
答案 0 :(得分:3)
尝试添加斜杠,如
$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)."')");
答案 1 :(得分:0)
当你没有逃避输入时会发生这种情况
INSERT INTO users (myfield)
VALUES ('Niko's Dog')
^-----------string end
您最好使用预备语句。见here
答案 2 :(得分:0)
查看使用Prepared Statements,以避免转义问题以及恶意输入:
$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_*
函数已被弃用。
答案 3 :(得分:0)
首先,永远不要相信用户输入!在使用之前总是过滤它,因为用户是邪恶的(你必须在编写任何软件时这样思考)。
此外,您应该跳过使用已弃用的mysql_*
,而是使用eg。 PDO
(或mysqli_*
如果您想使用更类似于mysql_*
的内容),这非常简单,并为您提供更多可能性。例如。允许您使用prepared statements
。使用它可以让您编写更安全,更好的软件。
答案 4 :(得分:0)
只需将以下代码添加到服务器端文件中即可。因此它会检查表单的每个字段。
foreach ($_POST as $key => $value) {
if(!is_array($value)){
$_POST[$key] = mysql_real_escape_string($value);
}
}
答案 5 :(得分:-1)
除了addslashes
和mysql_real_escape_string
之外,你也可以使用str_replace
:
$myval=str_replace("\'","'","$myval");