You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含双/单引号的HTML代码转SQL插入字符串的PHP解决方案

解决方案

优先用预处理语句(安全又省心)

直接拼接SQL不仅容易触发引号语法错误,还会带来SQL注入风险,用预处理语句能一次性解决这两个问题,这是行业标准的安全做法。

PDO写法

// 假设你已经有PDO连接实例$pdo
$sql = "UPDATE $table SET value = :data WHERE sectionId = :id";
$stmt = $pdo->prepare($sql);
// 绑定参数,PDO自动处理引号和特殊字符
$stmt->bindParam(':data', $data, PDO::PARAM_STR);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();

$data直接赋值你那段包含单双引号的HTML代码即可,不需要做任何手动转义,预处理机制会自动搞定所有引号兼容问题。

MySQLi写法

// 假设已有mysqli连接实例$conn
$sql = "UPDATE $table SET value = ? WHERE sectionId = ?";
$stmt = $conn->prepare($sql);
// 第一个参数"si"表示:第一个变量是字符串(s),第二个是整数(i)
$stmt->bind_param("si", $data, $id);
$stmt->execute();

同样,$data直接放入目标HTML代码即可,无需手动处理引号。

非要用字符串拼接的话(不推荐,风险高)

如果因特殊情况必须保留原有拼接方式,需要对$data中的单引号做转义处理:

用MySQLi自带的转义函数

// 先将目标HTML代码赋值给$data
$data = '<div class="card custom-card mt-3">
        <div class="card-body" id="default">
            <div class="row">
                <div class="col-lg-8">
                    <input type=\'text\' name="project_code" placeholder="Dear Client," class="form-control" onkeyup="setvalue(this)" id="text" />
                </div>
            </div>
        </div>
    </div>
    <script>
    var counterSection = 0;

    function init() {
        
        dragula([document.getElementById(\'default\')]).on(\'drag\', function (el) {
                el.className = el.className.replace(\'draggable\', \'\');
            }).on(\'drop\', function (el) {
                el.className += \' draggable\';
            });
    </script>';

// 基于当前数据库连接转义特殊字符
$escaped_data = mysqli_real_escape_string($conn, $data);
// 拼接时必须用单引号包裹转义后的字符串
$sql = 'update '.$table.' set value = \''.$escaped_data.'\' where sectionId = '.$id;
// 执行SQL语句
$conn->query($sql);

注意:必须基于当前数据库连接进行转义,否则转义规则可能不匹配;另外这种方式依然存在SQL注入风险,能不用就不用。

手动替换单引号(仅应急场景)

如果无法获取数据库连接,可临时手动将$data中的单引号替换为两个单引号(SQL标准转义规则):

$escaped_data = str_replace("'", "''", $data);
$sql = 'update '.$table.' set value = \''.$escaped_data.'\' where sectionId = '.$id;

这种方法仅能处理单引号,无法兼容其他特殊字符(如反斜杠、换行符),风险较高,不推荐常规使用。


内容的提问来源于stack exchange,提问作者consolenine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:27:17