繁体   English   中英

当输入字段有撇号时,Mysql插入不起作用

[英]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);
    }
}  

除了addslashesmysql_real_escape_string您还可以使用str_replace

$myval=str_replace("\'","'","$myval");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM