Php 我有一个HTML表单用于更新数据库中的内容,如果我在表单的输入字段中键入一个引号,sql更新将失败

Php 我有一个HTML表单用于更新数据库中的内容,如果我在表单的输入字段中键入一个引号,sql更新将失败,php,html,mysql,database,Php,Html,Mysql,Database,我有一个非常简单的表单,当我在表单输入字段中键入时,数据被传递到一个php脚本中,它将数据添加到我的数据库中。但是,如果输入带有撇号或单引号的内容,则会中断查询,并且数据不会添加到数据库中 表格代码 <form method="POST" action="#"> <table> <tr> <td><label>Title: </label><br

我有一个非常简单的表单,当我在表单输入字段中键入时,数据被传递到一个php脚本中,它将数据添加到我的数据库中。但是,如果输入带有撇号或单引号的内容,则会中断查询,并且数据不会添加到数据库中

表格代码

<form method="POST" action="#">

        <table>
            <tr>
                <td><label>Title: </label><br><input type="text" name="title1" placeholder="<?php echo htmlspecialchars($deal1title); ?>"></td>
            </tr>

            <tr>
                <td>
                    <label>Description: </label><br><textarea style="height: 200px;" name="desc1" placeholder="<?php echo htmlspecialchars($deal1desc); ?>"></textarea>
                </td>
            </tr>

            <tr>
                <td><label>Price: </label><br><input type="text" name="price1" placeholder="<?php echo htmlspecialchars($deal1price); ?>"></td>
            </tr>

            <tr>
                <td><label>Include: </label><br><input type="text" name="include1" placeholder="<?php echo htmlspecialchars($deal1inc); ?>"></td>
            </tr>

            <tr>
                <td><label>Not Include: </label><br><input type="text" name="notinc1" placeholder="<?php echo htmlspecialchars($deal1noinc); ?>"></td>
            </tr>

            <tr>
                <td><input type="submit" name="submit1" value="Save"></td>
            </tr>

        </table>

    </form>

这就是为什么您必须小心转义您输入到查询中的数据,或者最好使用准备好的语句。您的代码当前易受sql注入攻击

快速而肮脏的方法是对进入查询的所有变量使用
mysqli\u real\u escape\u string()
,以转义任何特殊字符。例如:

mysqli_query($connect, "UPDATE specials SET description='".mysqli_real_escape_string($connect, $getDesc1)."' WHERE id=1"); 
$stmt = $db->prepare("UPDATE specials SET description=? WHERE id=1");
$stmt->execute(array($getDesc1));

更好的解决方案是将准备好的语句与PHP的PDO驱动程序一起使用。例如:

mysqli_query($connect, "UPDATE specials SET description='".mysqli_real_escape_string($connect, $getDesc1)."' WHERE id=1"); 
$stmt = $db->prepare("UPDATE specials SET description=? WHERE id=1");
$stmt->execute(array($getDesc1));

PDO为您处理所有的数据卫生,从而解决您的问题并同时防止SQL注入攻击。

尝试使用
mysqli\u real\u escape\u string()
您应该已经使用了,因为您已经对SQL注入开放了。我会使用它来包装我试图在查询中设置的变量吗?是的。例如:
$var=mysqli\u real\u escape\u字符串($con,$\u POST['var'])
-
$con
是您的DB连接变量。我尝试了$getDesc1=mysql\u real\u escape\u字符串($\u POST[“desc1]”);但是我得到了以下错误:警告:mysql_real_escape_string()[]:在第20行的/home/sfloresw/public_html/ecuador/admin.php的/home/sfloresw/public_html/admin.php中,用户“root”@“localhost”(使用密码:NO)的访问被拒绝,而不是
mysql_real_escape_string
你漏掉了
I
这是我写的
$var=mysqli_real_escape_string($con,$'var')加上连接变量。