在自动回复器的文本框中使用撇号时出现MySQL错误

时间:2010-09-25 05:42:37

标签: mysql

我遇到了在广告区域的文本框中输入撇号的问题。我收到一条错误消息,指出使用了错误的语法,并检查mysql手册中是否有正确的语法。以下是我得到的确切错误。


MySQL错误:1064(您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以获得正确的语法,只需检查以确保您收到免费下载。如果没有,这是'第5行)


我已经检查了我的托管服务,但他们无法帮助我。我打电话给自动回复软件开发人员并发邮件,但他们没有回应。 (后来发现了为什么,所有的投诉都反对他们)。我在网上搜索并发现了一些像这样的网站,但我不知道如何设置字符串或在哪里放置它。

请帮忙。 谢谢, 丹妮丝

2 个答案:

答案 0 :(得分:0)

尝试对每个撇号使用两个撇号。如果这样做,那么在数据库处理sql之前执行验证替换。

答案 1 :(得分:0)

如果您正在使用PHP,请使用“mysql_real_escape_string”使您的帖子或变量安全并进行sql验证。这将使您的字符串安全“SQL注入太多”

<?php

if (isset($_POST['product_name']) && isset($_POST['product_description']) && isset($_POST['user_id'])) {
    // Connect

    $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');

    if(!is_resource($link)) {

        echo "Failed to connect to the server\n";
        // ... log the error properly

    } else {

        // Reverse magic_quotes_gpc/magic_quotes_sybase effects on those vars if ON.

        if(get_magic_quotes_gpc()) {
            $product_name        = stripslashes($_POST['product_name']);
            $product_description = stripslashes($_POST['product_description']);
        } else {
            $product_name        = $_POST['product_name'];
            $product_description = $_POST['product_description'];
        }

        // Make a safe query
        $query = sprintf("INSERT INTO products (`name`, `description`, `user_id`) VALUES ('%s', '%s', %d)",
                    mysql_real_escape_string($product_name, $link),
                    mysql_real_escape_string($product_description, $link),
                    $_POST['user_id']);

        mysql_query($query, $link);

        if (mysql_affected_rows($link) > 0) {
            echo "Product inserted\n";
        }
    }
} else {
    echo "Fill the form properly\n";
}
?>