数据包含单引号时查询中断

时间:2014-05-21 19:54:54

标签: php

大家好,我需要你的帮助这个PHP代码, 并尝试使用文本框创建调查名称。但是,$survey_name = $_POST['txtSurveyName'];不会保存任何输入,例如Department's但会保存Departments

我注意到问题出在单引号上,如何编写这段代码来接受单引号?

这是完整的代码:

    **$survey_name = $_POST['txtSurveyName'];**
    $survey_status = $_POST['status'];

    // Save question
    $sql = "INSERT INTO survey(survey_name, status) VALUES('{$survey_name}','{$survey_status}')";
    $result = mysql_query($sql);

    // Redirect to landing page

3 个答案:

答案 0 :(得分:9)

尽管我讨厌这个答案,但我仍然会告诉你,你需要逃避你的问题:

$survey_name = mysql_real_escape_string($_POST['txtSurveyName']);

但我建议使用 PDO MySQLi 预备语句。更好的安全性。

PDO如此简单:

//prepare query
$stmt = $pdoInstance->prepare('INSERT INTO survey(survey_name, status) VALUES(:name, :status)');

//bind params
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(':status', $status, PDO::PARAM_STR);

if ($stmt->execute()) {
  //success
}

通过这种方式,您的代码更安全,我感觉更好,因为我没有提出可怕的建议。

答案 1 :(得分:1)

来自:http://us2.php.net/mysql_real_escape_string

$survey_name = $_POST['txtSurveyName'];
$survey_status = $_POST['status'];

$sql = sprintf("INSERT INTO survey(survey_name, status) VALUES('%s','%s')'",
    mysql_real_escape_string($survey_name),
    mysql_real_escape_string($survey_status));

$result = mysql_query($sql);

答案 2 :(得分:0)

更改您的查询以转义特殊字符:

$sql = "INSERT INTO survey(survey_name, status) VALUES(\"{$survey_name}\",\"{$survey_status}\")";

$sql = "INSERT INTO survey(survey_name, status) VALUES('".addslashes($survey_name)."','".addslashes($survey_status)."')";