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

时间:2013-11-18 11:42:17

标签: php mysql

我第一次遇到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')");

无法插入数据..

有什么意见吗?我需要所有字符都有效。

6 个答案:

答案 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)

除了addslashesmysql_real_escape_string之外,你也可以使用str_replace

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