Cloud SQL中带有LIKE语句的PDO参数化查询

时间:2018-07-28 16:56:28

标签: php mysql google-app-engine pdo google-cloud-sql

当我在Google Cloud Shell中运行此查询时,它可以正常工作并按预期返回5行数据:

SELECT * FROM tblData WHERE Address LIKE '%123 Queen%' LIMIT 5;

但是当我将相同的搜索词123 Queen传递给此参数化PDO查询时,它不会返回任何结果:

$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$stmt = $conn->prepare("SELECT * FROM tblData WHERE Address LIKE :term LIMIT 5");
$stmt->execute(array(':term' => '%'.$_GET['term'].'%'));

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

尝试类似的方法:SELECT * FROM tblData WHERE Address LIKE CONCAT('%',:term,'%') LIMIT 5

答案 1 :(得分:0)

我最初的问题问为什么这个参数化的PDO查询没有返回任何记录:

std::vector<std::vector<int>> lists = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}};

void editor(int determiner)
{
    lists[determiner][5]++;
}

事实证明,以上代码绝对没有错。我的错误是我在下面的$conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $stmt = $conn->prepare("SELECT * FROM tblData WHERE Address LIKE :term LIMIT 5"); $stmt->execute(array(':term' => '%'.$_GET['term'].'%')); $array = array(); foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) AS $x) { $array[] = $x; } 语句中引用了错误的变量名。当我应该这样称呼json_encode时,我错误地提到了array

$array

我应@LundinCast的要求提供此答案。