【问题标题】:PDO MySQL query using apostrophes in LIKE clause在 LIKE 子句中使用撇号的 PDO MySQL 查询
【发布时间】:2015-08-15 13:07:12
【问题描述】:

我有以下查询

$area = "AREA V";

$sql = $pdo->prepare("SELECT areas FROM ranks WHERE areas LIKE :area");
$sql->bindValue(':area', '%' . $area . '%');
$sql->execute();
$num = $sql->rowCount();

area 包含数据,例如'AREA I', 'AREA V', 'AREA VII'.

问题是,当我使用LIKE '%AREA V%' 执行查询时,会出现没有AREA V 但有AREA VIAREA VII 的结果。没错,应该如此,但我不希望这样。

我曾尝试在LIKE 子句中添加撇号,但无法正常工作。

我尝试过的事情:

// using apostrophes and PDO::PARAM_STR
$sql = $pdo->prepare("SELECT areas FROM ranks WHERE areas LIKE :area");
$sql->bindValue(':area', '%'' . $area . ''%', PDO::PARAM_STR);

// using IN
$sql = $pdo->prepare("SELECT areas FROM ranks WHERE :area IN (areas)");
$sql->bindValue(':area', $area);

最好的方法是什么?

【问题讨论】:

  • 当您将搜索值更改为 %AREA%(可能是在将 WHERE 调整为 UPPER(areas) like :area 之后)时,您是否得到了缺失值?您尝试SELECT DISTINCT areas FROM ranks ORDER BY areas 成功了吗?

标签: mysql pdo sql-like in-operator


【解决方案1】:

我假设您正在搜索 'Area V' with 单引号。我认为您只需要正确分隔字符串即可。比如:

// using apostrophes and PDO::PARAM_STR
$sql = $pdo->prepare("SELECT areas FROM ranks WHERE areas LIKE :area");
$sql->bindValue(':area', "%'" . $area . "'%", PDO::PARAM_STR);

您想要的值在 SQL 中表示为'%''Area V'''。双单引号用于将单引号放在字符串中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2012-06-19
    • 2012-04-01
    相关资源
    最近更新 更多