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

如何在PHP+MySQL查询中处理含撇号('s)的字符串?

解决MySQL查询含撇号字符串的问题

你的问题根源是SQL语句里的单引号会被MySQL当作字符串的结束标记,'willy's Kitchen'会被解析成'willy',后面的s Kitchen'就成了语法错误,导致查询失败。以下是两种正确的处理方式:

方法1:使用预处理语句(强烈推荐)

预处理语句能自动处理字符串中的特殊字符(包括撇号),还能彻底避免SQL注入,是最安全可靠的方案,不管用PDO还是mysqli都能实现:

PDO实现示例

// 连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=你的数据库名', '用户名', '密码');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// 准备预处理语句
$stmt = $pdo->prepare("SELECT * FROM shope_details WHERE shop_name = ?");
// 绑定查询参数并执行
$targetShop = "willy's Kitchen";
$stmt->execute([$targetShop]);

// 获取查询结果
$shops = $stmt->fetchAll(PDO::FETCH_ASSOC);

MySQLi面向对象实现示例

// 连接数据库
$mysqli = new mysqli('localhost', '用户名', '密码', '你的数据库名');
if ($mysqli->connect_error) {
    die("连接失败: " . $mysqli->connect_error);
}

// 准备预处理语句
$stmt = $mysqli->prepare("SELECT * FROM shope_details WHERE shop_name = ?");
// 绑定参数(s代表字符串类型)
$targetShop = "willy's Kitchen";
$stmt->bind_param("s", $targetShop);
// 执行查询
$stmt->execute();

// 获取结果集
$shops = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);

// 关闭资源
$stmt->close();
$mysqli->close();

方法2:手动转义特殊字符(不推荐)

如果非要手动处理,可以用MySQL提供的转义函数,把字符串里的单引号转成两个单引号,让MySQL正确识别:

$mysqli = new mysqli('localhost', '用户名', '密码', '你的数据库名');
$targetShop = "willy's Kitchen";
// 转义特殊字符
$escapedShop = $mysqli->real_escape_string($targetShop);
// 构造查询语句
$query = "SELECT * FROM shope_details WHERE shop_name = '$escapedShop'";
// 执行查询
$result = $mysqli->query($query);

注意:手动转义容易遗漏特殊字符,还存在SQL注入风险,除非特殊情况,优先用预处理语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:41:13